springboot整合sentinel
一、准备
- docker安装好sentinel-dashboard(sentinel控制台),参考docker安装好各个组件的命令
- 启动sentinel-dashboard,我的虚拟机ip为
192.168.200.131,sentinel-dashboard的端口为8858
二、整合sentinel的主要工作
- 在需要监控的服务中引入
spring-cloud-starter-alibaba-sentinel依赖 - 在
bootstrap.yml中设置好sentinel-dashboard的ip:port
在我的项目中,给
order-service和product-service都引入了sentinel
# pom.xml
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency># bootstrap.yml
spring:cloud:sentinel:transport:dashboard: 192.168.200.131:8858
三、查看sentinel控制台
- 启动两个服务
- docker启动sentinel控制台
- 浏览器输入:
http://192.168.200.131:8858/ - 输入默认账号密码都是sentinel
- 浏览器输入:
刚开始控制台左边只能看到
sentinel-dashboard,只有当我们第一次访问过后,相应的服务和请求才会在左边(和簇点链路)中出现

四、控制台基础功能
4.1 流量控制
4.2 熔断降级
(1)当未配置熔断降级功能时
对product-service的/product/getByObj限流为QPS=10,超过10则迅速失败
使用jmeter进行压测,QPS为20,访问接口为http://127.0.0.1:8081/order/get2,发现20个请求里有10个请求访问失败,浏览器报500错误

此外,idea控制台报异常
feign.FeignException$TooManyRequests: [429] during [POST] to [http://product-service/product/getByObj] [IProductClient#getByObj(ProductDTO)]: [Blocked by Sentinel (flow limiting)]
sentinel控制台显示有10个请求被拒绝

(2)给IProductClient配置熔断降级功能
以IProductClient这个feign接口为例,当这个接口对应的http请求被限流阻断时,启用一个新的IProductClient对服务进行降级(实际项目中比如:"当前请求繁忙,请稍后访问"或者推荐别的页面)。
步骤如下:
- 在
sd-api模块的com.hdl.api.client.product包下建一个fallback包,用来存放feignclient的请求调用被熔断时降级处理的类 - 在该包下建
ProductClientFallback类 - 在
IProductClient的@FeignClient注解上配置fallbackFactory = ProductClientFallback.class - 需要将
ProductClientFallback类放入ioc容器,因此在com.hdl.api.config包下建一个FallbackConfig,用来生产ProductClientFallbackbean,同时将FallbackConfig放到·spring.factories·文件里
