欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

springcloudalibaba学习(十三)使用Sentinel实现流量控制

时间:2023-06-12
目录

前言一、安装 sentinel-dashboard二、接入客户端


前言

    Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。

Sentinel 的主要工作机制如下:

    对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。

    根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。

    Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。


一、安装 sentinel-dashboard

1、下载

https://github.com/alibaba/Sentinel/releases

2、启动

java -Dserver.port=8080 -jar sentinel-dashboard.jar

3、访问页面

http://172.16.10.159:8080/

用户名密码 默认为 sentinel/sentinel

二、接入客户端

1、配置文件新增配置项

# 本地启动的端口,与dashboard服务端进行数据交互spring.cloud.sentinel.transport.port=8719# dashboard服务端地址端口spring.cloud.sentinel.transport.dashboard=172.16.10.159:8080# 心跳客户端地址,本机地址spring.cloud.sentinel.transport.client-ip=192.168.100.73

2、接口

public interface SentinelService { public Map test();}

3、实现类

使用 @SentinelResource 注解,指定resource 的名称和 限流时的回调 blockHandler

@Servicepublic class SentinelServiceImpl implements SentinelService { @SentinelResource(value = "sentinel-test", blockHandler = "testHandler") @Override public Map test(){ ImmutableMap map = ImmutableMap.of( "code", 200, "success", true); return map; } public Map testHandler(BlockException e) { ImmutableMap map = ImmutableMap.of( "code", 500, "reason", "服务流量控制", "error", e); return map; }}

4、controller

@RestController@RequestMapping("/sentinel")public class SentinelController { @Autowired private SentinelService sentinelService; @GetMapping("/test") public Map test(){ return sentinelService.test(); }}

5、访问controller中test接口

访问接口之后,打开sentinel 控制台,能够找到对应的客户端,找到簇点链路,找到指定的 resource 名称

点击右侧流控,添加流量规则


6、增加流量规则之后,连续多次访问controller接口,当请求速率大于规则里的QPS时,返回值会出现以下情况:

进入了 自定义的 testHandler( )

{ "code": 500, "reason": "服务流量控制", "error": { "cause": null, "stackTrace": [], "rule": { "resource": "sentinel-test", "limitApp": "default", "grade": 1, "count": 1.0, "strategy": 0, "refResource": null, "controlBehavior": 0, "warmUpPeriodSec": 10, "maxQueueingTimeMs": 500, "clusterMode": false, "clusterConfig": { "flowId": null, "thresholdType": 0, "fallbackToLocalWhenFail": true, "strategy": 0, "sampleCount": 10, "windowIntervalMs": 1000 } }, "ruleLimitApp": "default", "message": null, "suppressed": [], "localizedMessage": null }}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。