day3微服务关于sentinel组件限流

  1. sentinel配置

(1)在csmall-stock-webapi模块中

添加sentinel的依赖

<!--  sentinel依赖  -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

(2)application-dev.yml文件添加配置

spring:
  application:
    #  为当前项目起名,这个名字会被Nacos记录并使用
    name: nacos-stock
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080 # 配置sentinel的位置(运行状态仪表盘)
        # 执行限流的端口号,每个项目都不同(别的项目例如cart模块,要再向设置限流就不能用8721了)
        port: 8721
    nacos:
      discovery:
        # 配置Nacos所在的位置,用于注册时提交信息
        server-addr: localhost:8848

(3)Sentinel启动---直接双击start-sentinel.bat

打开浏览器http://localhost:8080/

会看到下面的界面

账号和密码都是sentinel

但是我们要在knife4j里面先把功能测试了,才能够看得到簇点链路上有相应的服务方法的列表。

  1. 方法上自定义限流

自定义限流方法

对于被限流的请求,我们可以自定义限流的处理方法

默认情况下可能不能正确给用户提示,一般情况下,对被限流的请求也要有"服务器忙请重试"或类似的提示

StockController类中@SentinelResource注解中,可以自定义处理限流情况的方法

@PostMapping("/reduce/count")
@ApiOperation("减少商品库存数")
// @SentinelResource注解要标记控制层的方法才能生效,会在该方法运行时,被Sentinel管理
// 这个控制器方法第一次运行后,会在Sentinel仪表台中看到限流选项
// "减少商品库存数",会定义仪表台中代表该方法的选项名称
// blockHandler能够指定当前方法被限流时运行的方法名称
@SentinelResource(value = "减少商品库存数",blockHandler = "blockError")
public JsonResult reduceCommodityCount(StockReduceCountDTO stockReduceCountDTO){
    // 调用业务逻辑层
    stockService.reduceCommodityCount(stockReduceCountDTO);
    return JsonResult.ok("库存减少已执行");
}

// Sentinel 自定义限流方法,规则如下
// 1.访问修饰符必须是public
// 2.返回值类型必须和控制器方法一致
// 3.方法名必须和对应的限流控制器方法定义的blockHandler属性值一致
// 4.方法的参数列表必须和控制器一致,而且还要额外添加BlockException类型的参数
public JsonResult blockError(StockReduceCountDTO stockReduceCountDTO,
                             BlockException e){
    // 运行这个方法就是被限流了,直接返回被限流的提示即可
    return JsonResult.failed(ResponseCode.INTERNAL_SERVER_ERROR,
                        "服务器忙,请稍后再试");
}

我这里QPS写了1,然后就是回到knife4j上面,不断发送10遍左右,里面有成功的200状态,也有如下500状态码所对应的状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值