Feign如何针对单个服务屏蔽Hystrix熔断功能
1. 說明
在實際項目中,需要針對單個服務屏蔽Hystrix,但又不想影響對其他服務調用的熔斷降級功能。我們知道hystrix有default默認全局配置, 也有根據HystrixCommandKey針對接口做具體配置,但是某個服務可能會有很多接口, 并不能解決針對單個服務屏蔽Hystrix功能,有沒有簡便快速的實現方法? 查閱官方資料,是可以支持的。
2. 實現
官方的文檔寫得比較粗略,沒有實際的實例,而且在實際運用中, 沒有配置正確會有額外的問題。
整體思路是創建一個獨立的Feign實例,提供給需要屏蔽的服務, 其他仍走系統初始化的可以支持Hystrix的Fegin實例。
創建獨立的配置類
FeignClientWithoutHystrixConfig
// @Configuration public class FeignClientWithoutHystrixConfig {private final Logger log = LoggerFactory.getLogger(this.getClass());/*** 創建獨立的Fegin調用實例* @return*/@Bean@Scope("prototype")public Feign.Builder feignBuilder() {log.debug("Creating feign builder without hystrix");return Feign.builder();} }說明: @Configuration注解實質上是可以注釋的, 如果不想注釋, 需要排除掃描, 否則會覆蓋默認的Feign實例。
@ComponentScan(basePackages = "com",excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = FeignClientWithoutHystrixConfig.class)})指定配置類
在FeignClient中指定配置類FeignClientWithoutHystrixConfig
@FeignClient(name = "withoutHystrix",url = "conrad.fake",fallback = FeignClientWithoutHystrix.FallbackThatShouldNotOccur.class,configuration = FeignClientWithoutHystrixConfig.class) public interface FeignClientWithoutHystrix {@RequestMapping(method = RequestMethod.GET, value = "/fake/url")String getFromFakeUrl();@Componentclass FallbackThatShouldNotOccur implements FeignClientWithoutHystrix {private final Logger log = LoggerFactory.getLogger(this.getClass());@Overridepublic String getFromFakeUrl() {log.error("This fallback shouldn't occur");return "Fallback";}}}3. 驗證
不需要熔斷降級的接口訪問,會直接出現錯誤
其他的接口會正常進入熔斷降級
4. 問題補充
排除掃描不生效的問題
如果是通過ComponentScan排除掃描,但不生效, 這個時候需要檢查系統是否有其他地方也配置了ComponentScan進行了同樣的目錄掃描, 這個時候是會覆蓋, 不能有效控制,需要一并排除。
@ComponentScan(basePackages = "com",excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = BaseAutoConfiguration.class),@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = FeignClientWithoutHystrixConfig.class)})FeignClient中指定了配置類, 但仍會進入Hystrix熔斷
這個時候需要檢查FeignClient名稱不能重名, 如果重名,會被覆蓋不生效。
備注: 已上傳提供源碼示例,地址: https://download.csdn.net/download/hxx688/21719912
總結
以上是生活随笔為你收集整理的Feign如何针对单个服务屏蔽Hystrix熔断功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Golang GOPATH 包
- 下一篇: 每天一个linux命令(37):date