openFeign+sentinel 对远程调用熔断降级
openFeign+sentinel 对远程调用熔断降级
需求:
在member-service-nacos-consumer-80 调用某个无效服务时,启动Sentinel的熔断降级机制, 能够快速返回响应,而不是使用默认的超时机制(因为超时机制容易线程堆积, 从而导致雪崩)
异常场景
1. 两个服务都挂掉
由于 Customer 它要定时从 Nacos 把服务拿过来【它担心服务是有变化的,时间大概是 30s 左右】
2. 两个服务都正常,将 10004 执行时间设置成 2s,10006 正常执行
代码 + 配置解决问题
本质:对 Service 中方法的异常处理
1. 写一个类,实现这个接口【使用 @Component注解注入容器】
package com.llq.springcloud.service;
@Component
public class MemberFeignFallbackService implements MemberOpenFeignService {
@Override
public Result<Member> getMemberById(Long id) {
return Result.error("500", "被调用服务异常 ===> 熔断降级,快速返回结果,防止线程堆积");
}
}
2. 在接口中,增加fallback 注解,调用实现接口的类来处理异常
@FeignClient(value = "member-service-nacos-provider", fallback = MemberFeignFallbackService.class) // value:服务名称
public interface MemberOpenFeignService {
@GetMapping(value = "/member/get/{id}")
public Result<Member> getMemberById(@PathVariable("id") Long id);
}
异常处理逻辑如下:
3.application.yml 中进行 openFeign 和 sentinel 整合
server:
port: 81
spring:
application:
name: member-service-nacos-consumer-81
cloud:
nacos:
discovery:
server-addr: localhost:8848
# 配置 sentinel
sentinel:
transport:
dashboard: localhost:9999
port: 8888
# 配置暴露所有监控点
management:
endpoints:
web:
exposure:
include: '*'
# openfeign 和 sentinel 整合,必须配置
feign:
sentinel:
enabled: true
测试:
4. 注意事项
注意:由于 Consumer 已经被 sentinel 监控,所以我们可以加入相关的流控规则,比如为 /member/openfeign/consumer/get/1 加入流控规则 QPS = 1
那么则:
- 服务器正常
- QPS > 1,限流
- 正常返回
- 服务器异常
- QPS > 1,限流
- 异常,被 fallback 处理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix