• SpringClouldAlibaba 之 初识 Sentinel(二)


     

    前言

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

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

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

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

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

     

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

     

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

    下面我们持久化一下sentinel

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

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

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

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

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

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

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

    1. <dependency>
    2. <groupId>com.alibaba.cloudgroupId>
    3. <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
    4. dependency><dependency>
    5. <groupId>com.alibaba.cspgroupId>
    6. <artifactId>sentinel-datasource-nacosartifactId>
    7. dependency>复制代码

    配置一下yml文件

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

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

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

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

  • 相关阅读:
    Fluent瞬态结果的时间统计处理
    Linux 驱动开发:USB无线wifi驱动开发(MT7601)、完成WIFI管理工具安装
    Tomcat服务(部署、虚拟主机配置、优化)
    【零散技术】Odoo 服务台(helpdesk)Qweb设计模式
    Shell编程概述
    排序算法总结
    2024年全网最全的Jmeter+ant+jenkins实现持续集成教程
    WebSocket Day02 : 握手连接
    黑马JVM总结(十七)
    Kudu-1.16编译中下载Gradle依赖失败的解决办法
  • 原文地址:https://blog.csdn.net/YYniannian/article/details/126283398