个人随笔
目录
十二、springCloudAlibaba-sentinel流控模式之链路流控
2023-11-01 22:32:57

我们在十一、springCloudAlibaba-sentinel流控规则之关联流控 简单使用了下关联流控,这里来实时链路流控,链路流控是什么意思呢?

链路流控

我们的流控不仅仅可以在请求上,还可以在service上,如果流控在service上,那么我们要用SentinelResource来发布到setinel控制台。

  1. package com.suibibk.springCloud.order;
  2. import com.alibaba.csp.sentinel.annotation.SentinelResource;
  3. import com.alibaba.csp.sentinel.slots.block.BlockException;
  4. import org.springframework.stereotype.Service;
  5. @Service
  6. public class UserServiceImpl implements UserService{
  7. @Override
  8. @SentinelResource(value = "getUser", blockHandler = "exceptionHandler")
  9. public String getUser() {
  10. return "返回用户";
  11. }
  12. //自定义返回
  13. public String exceptionHandler(BlockException ex) {
  14. // Do some log here.
  15. ex.printStackTrace();
  16. return "被限流了";
  17. }
  18. }

然后假设我们有两个请求都调用这个资源

  1. @Autowired
  2. UserService userService;
  3. @RequestMapping("/test1")
  4. public String test1(){
  5. return userService.getUser();
  6. }
  7. @RequestMapping("/test2")
  8. public String test2(String id){
  9. return userService.getUser();
  10. }

可以看到/order/test1和/order/test2都调用了getUser资源
那么假设我们只想要对/order/test2调用getUser资源进行限流要怎么做呢?此时我们可以用链路模式进行流控

入口资源就是指要对哪个入口进行限流,这里配置的是/order/test2.

注意,我们需要开启链路,也就是配置要加上web-context-unify

  1. spring:
  2. application:
  3. name: order-sentinel
  4. cloud:
  5. sentinel:
  6. transport:
  7. dashboard: localhost:8084
  8. web-context-unify: false #默认将调用链路收敛,要用链路流控,这里需要改为false

启动后,访问test1和test2后可以看到链路效果

设置完规则后,尝试访问,会发现/order/test2会被限流,/order/test1不会。

ok!

 42

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2