5. Alibaba Sentinel 流控规则之链路

1. 名词解释链路

介绍

链路是指调用路径, 假如某一个服务方法有多个调用来源, 如果我们只想限制来自于某一个来源的的调用路径, 就可以通过链路来限流,这个调用路径就是链路

比如在一个微服务中,两个接口都调用了同一个Service中的方法,并且该方法用SentinelResource(用于定义资源)注解标注了,然后对该注解标注的资源(方法)进行配置,则可以选择链路模式。

图解

2. 具体演示

1. 首先我们编写一个Service

@Service
public class TestService {
    @SentinelResource("myService")
    public String myService() {
        return "test service";
    }
}

2. 然后更改接口调用这个Service方法

@RestController
public class FlowLimitController {
    @Autowired
    private TestService testService;

    @GetMapping("/testA")
    public String testA() {
        return "-----testA - " + testService.myService();
    }

    @GetMapping("/testB")
    public String testB() {
        return "-----testB - " + testService.myService();
    }
}

3. 接下来配置流控规则

当我们运行项目,并访问/testA或/testB后就会在sentinel dashbord中看到簇点链路myService

这时候我们要对这个注解SentinelResource定义的簇点链路设置流控规则。

这里设置表示访问myService这个资源的入口资源是/testA时并且QPS超过1就会触发流控。

但是此时如果我们访问/testA会发现实际上是不会流控的,这是因为Sentinel 的 CommonFilter 的 web-context-unify 参数默认为true,表示要将调用链路收敛,会导致链路流控效果无效。 我们需要将这个参数设置成true才能取消链路收敛才会生效。

application.properties

server.port=8401
spring.application.name=sentinel-service
spring.cloud.nacos.discovery.server-addr=192.168.43.11:8848
# 配置Sentinel dashboard地址
spring.cloud.sentinel.transport.dashboard=192.168.43.11:31808
# 默认8719端口,被占用会自动从8719+1,直到找到未被占用的端口
spring.cloud.sentinel.transport.port=8719
# 默认为true,表示将调用链路收敛,会导致链路流控效果无效,需要改成false
spring.cloud.sentinel.web-context-unify=false
# 暴露所有端点,给dashboard用
management.endpoint.web.exposure.include=*
配置后重新启动应用,查看效果,这里需要注意,重新启动后sentinel dashboard就没有了,需要重新添加流控规则。

![](https://chyh741img.oss-cn-beijing.aliyuncs.com/typora/8/image_phXLWi2QJjRy5PoRcyFuMV.png)

3. 效果检验

最后这个时候我们再来频繁的访问/testA接口,就会出现异常的情况,这也是流量效果快速失败在链路上的体现,是直接抛出异常。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值