SpringClouldAlibaba 之 初识 Sentinel(二)

 

前言

上一篇我们讲了一些sentinel的基本概念和整和,触发流控后的统一返回处理和sentinel的持久化

首先我们先看看统一结果处理

创建一个配置类实现一下sentinel 提供的 callback 包下的 UrlBlockHandler 注意后面的版本换成了BlockExceptionHandler 只不过是重写的方法不一样。BlockExceptionHandler重写的是handle方法.

@Slf4j@Componentpublic class BugVipBlockExceptionHandler implements UrlBlockHandler {    @Override
    public void blocked(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException ex) throws IOException {
       log.info("sentinel handler:"+ex.getRule().toString());        String msg = null;        if (ex instanceof FlowException) {
            msg = "资源被限流了";
        } else if (ex instanceof DegradeException) {
            msg = "资源降级了";
        } else if (ex instanceof ParamFlowException) {
            msg = "热点参数限流";
        } else if (ex instanceof SystemBlockException) {
            msg = "系统规则(负载/...不满足要求)";
        } else if (ex instanceof AuthorityException) {
            msg = "授权规则不通过";
        }        // http状态码
        httpServletResponse.setStatus(500);
        httpServletResponse.setCharacterEncoding("utf-8");
        httpServletResponse.setHeader("Content-Type", "application/json;charset=utf-8");
        httpServletResponse.setContentType("application/json;charset=utf-8");        // spring mvc自带的json操作工具,叫jackson
        new ObjectMapper().writeValue( httpServletResponse.getWriter(), R.error().message(msg));
    }
}复制代码

这里的 FlowException 类型怎么查看呢
可以看到它的子类就是这五个类型

 

下面我们使用一下看看我们的统一配置有没有生效

 

当然你也可以使用 @SentinelResource注解进行指定处理方法(这个优先统一配置)

下面我们持久化一下sentinel

DataSource 扩展常见的实现方式有:

  • 拉模式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更;

  • 推模式:规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。

Sentinel 目前支持以下数据源扩展:

  • Pull-based: 动态文件数据源、Consul, Eureka

  • Push-based: ZooKeeper, Redis, Nacos, Apollo, etcd

我们这里今天就配置一下 nacos 首先引入一下maven(这里要注意下版本冲突  踩了一下午的坑~~~~😇😇😇😇)

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <!-- 这里的版本 2.2.3.RELEASE--></dependency><dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <!-- 这里的版本是1.8.0 --></dependency>复制代码

配置一下yml文件

spring:
  cloud:
    sentinel:
      enabled: true
      eager: true #饿汉模式会直接链接
      transport:
        clientIp: 192.168.1.9 # 代码所在iP
        dashboard: 192.168.1.7:8858 # 这是控制面板的地址
        port: 9091
      datasource:
        ds: #这个值可以自定义
          nacos:
            server-addr: 192.168.1.7:8848
            namespace: 120694d7-9815-4d3d-8150-d9c8bac82c11 # 这里是nacos 的命名空间
            group-id: dev # 分组ID
            data-id: ${spring.application.name}-flow-rules 
            data-type: json
            rule-type: flow
            复制代码

 这样配置完成之后  我们的项目启动后回去nacos 先去加载配置的流控规则 去push到 sentinel dashboard中去 下面我们可以试试是否生效。

 可以看到nacos中的流控规则被加载到了。(dashboard 的改造下一篇我们来修改)

实践是检验真理的唯一准则,感兴趣的可以去试试呀!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值