一 说明
1.1 架构说明
本案例实现原理: 采用alibaba的nacos,openfegin,sentinel,gateway等组件实现熔断限流。
主要理解sentinel的@ResouceSentinel和fallback的区别联系。
@ResourceSentinel 主要是页面配置熔断限流规则;
fallback主要是针对 jvm业务io异常进行逻辑处理。
![](https://img-blog.csdnimg.cn/direct/ca5e8a910d3d42faae8cafaa5224f8f7.png)
1.2 工程结构
1.消费者
![](https://img-blog.csdnimg.cn/direct/456948f5e0e945779f7e6d2e065aa50e.png)
2.openfeginApi
![](https://img-blog.csdnimg.cn/direct/c71fd26163044b98b92db3a15ac3d0eb.png)
3.gateway
![](https://img-blog.csdnimg.cn/direct/23b10f297077411182913238bbb15dcf.png)
4.提供者
![](https://img-blog.csdnimg.cn/direct/2c18e968c7014fce8da106ad70c9cfbd.png)
1.3 注意点
openapi这里请求路径,多了一个空格,提示服务fallback,注意路径要写正确。
![](https://img-blog.csdnimg.cn/direct/4deedbd368cb41f1982aedb946dbc3a1.png)
![](https://img-blog.csdnimg.cn/direct/31a5958134eb4749badae2dfc20be25f.png)
二 实施案例
2.1 消费者
1.pom文件
![](https://img-blog.csdnimg.cn/direct/b09a23d7a99e4383b2f8aba381989e93.png)
2.核心业务代码
![](https://img-blog.csdnimg.cn/direct/426d956c4d1a47bda433e03bf591eb77.png)
2.2 工具open-api
1.核心接口
注意: 这里@Feginclients 配置的服务为网关的服务名称:ms-alibaba-sentinel-gateway
![](https://img-blog.csdnimg.cn/direct/21076a9011cd41a0bc859c5089e20a3c.png)
2.3 网关Gateway
1.pom配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.8.6</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
<version>1.8.6</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
<scope>compile</scope>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 一定要加这个依赖,否则 网关配置lb://服务名 不起作用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.核心业务代码: 这里配置请求,1s超过2次,触发网关设置限流规则。
![](https://img-blog.csdnimg.cn/direct/04f92036e45f4d49a57f7af7dbb406d7.png)
3.application配置文件
2.4 服务提供者
1.核心业务代码
![](https://img-blog.csdnimg.cn/direct/951360f0ca9b4c068f9597e8c0171911.png)
2.5 启动服务
1.nacos
E:\nacos-server2.2.3\bin>startup.cmd -m standlone
2.sentinel
F:\>java -jar sentinel-dashboard-1.8.6.jar
3.业务服务启动
![](https://img-blog.csdnimg.cn/direct/5dc9e43469014a5eb21336ad75b55502.png)
2.6 验证
1.正常访问:通过8081 访问网关7777 转发到 提供端9091
http://localhost:8081/consumer/pay/nacos/sgo/444
![](https://img-blog.csdnimg.cn/direct/3204ff817df846639ca3b33b6c9b4db5.png)
2.频繁刷新**:触发网关配置的限流规则**
![](https://img-blog.csdnimg.cn/direct/5b79fe1a85524f28b4819ac7dc258203.png)
3.在openfeigin设置fallback策略
实现类
![](https://img-blog.csdnimg.cn/direct/1943e7b4a61047fab22e121aeb4d10cc.png)
打包,重新启动业务服务:
正常访问
![](https://img-blog.csdnimg.cn/direct/1e1a594226564236a200ffbd5c7b7559.png)
频繁刷新:触发fallback处理异常
![](https://img-blog.csdnimg.cn/direct/a8e53ae060ee4a7eae1a6ee93a445518.png)