栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Sentinel

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Sentinel

目录
  • Sentinel 介绍
  • sentinel 控制台的下载
  • 项目的准备:
        • pom:
        • yaml:
        • 主启动类:
  • 控制台的使用
      • 流控规则:
          • qps
          • 线程的配置:
          • 预热:
          • 链路:
          • 排队:
        • 热点规则
          • 参数特列:
        • 系统规则:
  • 降级:
  • 熔断:
  • 自定义class 解耦:
      • 自定义类
      • 方法的调用
    • 持久化:
  • 补充

Sentinel 介绍

sentinel 相当于是 hystrix 升级版
官网
实现熔断与限流:

sentinel 控制台的下载

下载地址
下载成功后是一个jar包 使用 java-jar 指令就可以运行了
打开 localhost:8080 端口就行: 默认密码账户都是 sentinel

项目的准备: pom:

最主要的是这两个

        
            com.alibaba.csp
            sentinel-datasource-nacos
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
        
yaml:
spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
    sentinel:
      transport:
        dashboard: localhost:8080 #配置Sentinel dashboard地址
        port: 8719
      datasource:
        ds1:  #把sentinel规则存入nacos
          nacos:
            server-addr: localhost:8848   # nacos地址
            dataId: ${spring.application.name} #服务的名称
            groupId: DEFAULT_GROUP # 分组名称
            data-type: json    #储存格式
            rule-type: flow    # 规则格式
主启动类:

这个注解记得加

@EnableDiscoveryClient
控制台的使用 流控规则: qps

这个配置就表示 一秒内单击数量不能超过1(单机阈值)

线程的配置:


图解:
左边高并发 qps 启动的效果
右边 线程的配置 配了一个 相当于就一个服务点 其他的无法处理直接报错

列子 这个线程 睡一秒每一个

然后 过多访问其他的 处理不了直接报错

预热:


结果就是 开始疯狂点击testB 链接 刚开始会报错后续就不会报错了 慢慢进入了加热状态。

链路:

待补充

排队:



默认每隔500ms 放 两个进来 其他的排队 要是排队时候超过了4000ms 则报错。注意是排队的时长 不是你的代码处理时长哦 你的代码就算睡一分钟 他也不会报错

热点规则

然后可视化界面配置:

资源名: 就是你加的那个注解时候配置的昵称
参数索引 : 就是你要限制哪个参数的 位置(从0开始)
单机阈值: 一秒内多少次
窗口时长:????
效果 你设定的哪个参数 只要传的链接 有他 且满足要求(单机阈值达标) 那就会施行对应的兜底方法。

参数特列:

表示 如果第一参数 如果传的值是5 则阈值变成 200 (记得点击右边的添加和下面的保存)

系统规则:

不常用 这个相当于对这个服务进行配置 前面的都是对具体的方法配置。

降级:

降级的作用 :
就是你在前面设置了 这个链接 一秒只能点击2下 如果超过了 那就会 施行降级
如果你没有进行自定义的降级方法 那就是默认的提示
自定义的降级则需要使用 这个注解: @SentinelResource
blockHandler 代表 降级使用那个方法

deal_testHotkey 是降级后使用的方法 参数必须加 BlockException
列子:

 @GetMapping("/testHotkey")
    @SentinelResource(value = "testHotke",blockHandler = "deal_testHotkey")
    public String hotkeyTest(@RequestParam(value = "p1",required = false) String p1,
                             @RequestParam(value = "p2",required = false)String p2){
        return "testHotkey";
    }
    public String deal_testHotkey(String p1, String p2, BlockException exception){
        return "deal_testHotkey 降级方法";
    }

熔断:

熔断就是 你的这个方法出错了 或者超时等 问题 该执行的方法:
一样的使用 这个注解: @SentinelResource
不过不同的是 注解里面的参数 fallback 才代表 熔断使用的方法

自定义class 解耦:

由于进行熔断和降级都需要 另外写方法 于是 可以把方法写在类里面
然后 利用注解使用

自定义类

注意 方法是静态的不然 无法使用:
注意和 hystrix 一样 兜底的方法 参数要保持一致。

方法的调用

注解只需要写上类 和要使用的方法即可:

持久化:

把sentinel 的规则储存到nacos :
导入依赖:

     
            com.alibaba.csp
            sentinel-datasource-nacos
        

配置yaml:

spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
    sentinel:
      transport:
        dashboard: localhost:8080 #配置Sentinel dashboard地址
        port: 8719
      datasource:
        ds1:  #把sentinel规则存入nacos
          nacos:
            server-addr: localhost:8848   # nacos地址
            dataId: ${spring.application.name} #服务的名称
            groupId: DEFAULT_GROUP # 分组名称
            data-type: json    #储存格式
            rule-type: flow    # 规则格式

在nocos 配置信息: id 得是你为服务的名称

[
    {
         "resource":"/testB",
         "limitApp":"default",
         "grade":1,
         "count":1,
         "strategy":0,
         "controlBehavior":0,
         "clusterMode":false
    }
]


然后 重启后需要访问了 testB 才能在sentinel显示出来,但是效果已经出来了。

补充

@SentinelResource 的name

注意:添加规则 如果直接使用他的 /路径 则兜底的方法 不会施行
得使用 他填写在注解的名字才行。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号