openFeign+sentinel
对远程调用熔断降级,启动 Sentinel的熔断降级机制 , 能够快速返回响应,而不是使用默认的超时机制(因为超时机制容易线程堆积, 从而导致雪崩)
pom.xml
对应子服务模块加入整合依赖
<!-- 加入 sentinel 和 nacos 持久化整合依赖 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
openfeign的service层
@Service
@FeignClient(value = "member-service-nacos-provider",fallback = MemberFeignFallbackService.class)
public interface MemberOpenFeignService {
/**
* get方法
* 远程调用 http://member-service-nacos-provider/member/get/{id}
* @param id
* @return
*/
@GetMapping(value = "/member/get/{id}")
public Result getMemberById(@PathVariable("id") Long id);
}
fallback异常处理
@Component
public class MemberFeignFallbackService implements MemberOpenFeignService {
@Override
public Result<Member> getMembertById(Long id) {
return Result.error("500", "被调用服务异常, 熔断降级,快速返回结果, 防止线程堆
积");
}
}
application.yml
server:
port: 10006
spring:
application:
name: member-service-nacos-provider
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url : jdbc:mysql://localhost:3306/ZyzSpringCould_db?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
#配置nacos
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置nacos-server的地址
sentinel:
transport:
dashboard: localhost:9999 #指定sentinel控制台地址
#4. 简单的说明: spring.cloud.sentinel.transport.port:指定被监控的微服务应用与
# Sentinel 控制台交互的端口,微服务应用本地会起一个该端口占用的 Http Server
port: 8719 #默认 8719,假如被占用了, 会自动从 8719 开始依次+1 扫描
#直至找到未被占用的端口
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.zyz.springcloud.entity
# 配置暴露所有的监控点,给sentinel用
management:
endpoints:
web:
exposure:
include: '*'
#openfeign 和 sentinel 整合,必须配
feign:
sentinel:
enabled: true
规则持久化
配置内容流控规则参数说明
- resource∶资源名称;
- limlitApp∶ 来源应用;
- grade∶阈值类型,0表示线程数,1表示QPS;
- count∶单机阈值;
- strategy∶流控模式,0表示直接,1表示关联,2表示链路;
- controlBehavior∶流控效果,0表示快速失败,1表示Warm Up,2表示排队等待;
- clusterMode∶是否集群

[
{
"resource":"/member/openfeign/consumer/get/1",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
pom.xml
<!-- 加入 sentinel 和 nacos 持久化整合依赖 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
application.yml
server:
port: 80
spring:
application:
name: member-service-nacos-consumer-80
# 配置nacos
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
dashboard: localhost:9999 #指定sentinel控制台地址
port: 8719 #默认 8719,假如被占用了, 会自动从 8719 开始依次+1 扫描
#直至找到未被占用的端口
#配置该微服务从 Nacos Server 获取流控规则
datasource:
ds1:
nacos:
server-addr: localhost:8848
dataId: member-service-nacos-consumer
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
#openfeign 和 sentinel 整合,必须配
feign:
sentinel:
enabled: true

rule-type: flow 是令牌桶算法
Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控 https://blog.youkuaiyun.com/qq_34416331/article/details/106668747
测试

对应sentinel中流控会自动设置QPS =1


OpenFeign与Sentinel集成实现服务熔断与限流
765





