摘要
本文將介紹在使用高版本Spring Cloud(2020.0.x及以后),由于取消了Hystrix的集成,導(dǎo)致OpenFeign與Hystrix熔斷降級(jí)不生效的問題。同時(shí),也將給出解決該問題的方案,即添加feign.circuitbreaker.enabled=true配置。
正文
1. 背景
隨著Spring Cloud框架的發(fā)展,高版本Spring Cloud(2020.0.x及以上)中取消了對(duì)Hystrix的集成和支持。這對(duì)之前依賴于Hystrix進(jìn)行服務(wù)熔斷和降級(jí)的項(xiàng)目帶來了一些困擾,特別是在使用OpenFeign進(jìn)行遠(yuǎn)程調(diào)用時(shí)。
2. 問題描述
在高版本Spring Cloud(2020.0.x及以上)中,原先使用OpenFeign與Hystrix進(jìn)行熔斷降級(jí)的配置方式已經(jīng)失效。具體來說,之前常用的配置項(xiàng)"feign.hystrix.enabled"被移除,無法再通過該配置項(xiàng)來啟用Hystrix相關(guān)功能。
2.1 癥狀
在忽略版本遷移的情況下,使用高版本Spring Cloud通過OpenFeign進(jìn)行服務(wù)調(diào)用時(shí),發(fā)現(xiàn)Hystrix的熔斷降級(jí)策略不起作用,即使配置了相關(guān)的降級(jí)邏輯,也無法觸發(fā)。
2.2 原因分析
主要原因是,自Spring Cloud 2020.0.0版本開始,已移除相關(guān)的Netflix OSS組件,自然就不再默認(rèn)集成Hystrix,取消了對(duì)Hystrix的自動(dòng)裝配。因此,導(dǎo)致配置項(xiàng)`feign.hystrix.enabled`不再生效。
2020.0.0版本前,只需在啟動(dòng)類上添加@EnableHystrix注解,OpenFeign的熔斷降級(jí)功能便可生效,因?yàn)锧EnableHystrix注解中引用了@EnableCircuitBreaker注解,默認(rèn)開啟了熔斷降級(jí)功能。而在2020.0.0版本后,@EnableCircuitBreaker注解已被廢棄:
且在spring-configuration-metadata.json文件中找不到hystrix相關(guān)配置:
3. 解決方案
為了解決高版本Spring Cloud中OpenFeign整合Hystrix熔斷降級(jí)不生效的問題,我們需要手動(dòng)添加配置來啟用Circuit Breaker模塊。
具體解決方案如下:
3.1 添加依賴
首先,在項(xiàng)目的構(gòu)建文件(例如Maven的pom.xml)中添加以下依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
3.2 配置開關(guān)
在項(xiàng)目的配置文件(例如application.yml或application.properties)中添加以下配置項(xiàng):
feign:
? circuitbreaker:
? ? enabled: true
該配置項(xiàng)用于啟用OpenFeign的Circuit Breaker模塊,從而替代了之前的Hystrix。
3.3 編寫熔斷降級(jí)邏輯
在需要進(jìn)行熔斷降級(jí)處理的Feign客戶端接口上,添加`@FeignClient`注解,并在`fallback`屬性中指定對(duì)應(yīng)的Fallback類(實(shí)現(xiàn)Feign客戶端接口)。示例代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-835621.html
@FeignClient(name = "service-name", fallback = MyFallback.class)
public interface MyFeignClient {
@GetMapping("/api/endpoint")
String getEndpoint();
}
@Component
public class MyFallback implements MyFeignClient {
@Override
public String getEndpoint() {
return "觸發(fā)服務(wù)降級(jí)";
}
}
4. 結(jié)論
通過以上的解決方案,我們可以在高版本Spring Cloud中成功啟用OpenFeign的熔斷降級(jí)功能,替代了取消的Hystrix集成。通過手動(dòng)配置`feign.circuitbreaker.enabled`,并編寫相應(yīng)的降級(jí)邏輯,我們可以繼續(xù)在項(xiàng)目中使用熔斷降級(jí)策略,確保系統(tǒng)的穩(wěn)定性。文章來源地址http://www.zghlxwxcb.cn/news/detail-835621.html
到了這里,關(guān)于高版本Spring Cloud中OpenFeign整合Hystrix熔斷降級(jí)不生效的問題及解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!