您好,登錄后才能下訂單哦!
本篇文章為大家展示了SpringCloud中如何使用Hystrix熔斷器,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
單詞本身意思就是斷路器,發音 [h?st'r?ks] ,怎么讀聽這里 https://www.koolearn.com/dict/wd_73657.html
Hystrix是NetFlix公司開源的項目,提供了熔斷器的功能,能夠阻止分布式系統中出現的聯動故障。
Hystrix通過隔離服務的訪問點阻止聯動故障,并且提供故障解決方案,提高了分布式系統的彈性和容錯。
防止服務故障導致資源耗盡。
通過熔斷機制,可以防止單個服務故障導致影響整個Servlet容器的線程資源。
避免過長等待。
快速失敗機制,如果某個服務故障,則接下來該服務不會處理請求,快速的返回失敗。
增加服務彈性。
提供了回退方案,請求發生故障時,可以調用fallback處理。
提供熔斷機制,防止故障傳播到其他服務。
熔斷后不斷嘗試,特定條件下可以自動修復服務。
提供監控。
提供熔斷器的監控組件 Hystrix Dashboard,可以實時監控斷路器的狀態。
無論是Ribbon使用還是Feign使用,都需要前面兩步
pom.xml中增加依賴
<!-- hystrix熔斷器依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency>
啟動類增加注解表示開啟熔斷器功能
@SpringBootApplication @EnableEurekaClient @EnableHystrix public class ServerApplication { private static final Logger logger = LoggerFactory.getLogger(ServerApplication.class); public static void main(String[] args) { SpringApplication.run(ServerApplication.class,args); logger.info("hystrix server start up finished !"); } }
@Autowired private RestTemplate restTemplate; /** * 每個需要熔斷的遠程方法上,增加注解,定義回調 * @HystrixCommand定義服務降級,這里的fallbackMethod服務調用失敗后調用的方法。 * @return */ @HystrixCommand(fallbackMethod = "hiError") public String getHi(){ return restTemplate.getForObject("http://hystrix-service/hi", String.class); } /** * fallbackMethod指向此方法,表示遠程調用失敗后,快速的使用此方法替代 */ public String hiError(){ return "error"; }
在遠程服務的FeignClient的注解上增加回調,定義回調類
@FeignClient(value = "common-service", configuration = FeignConfiguration.class, fallback = RemoteCommonServiceCallback.class) public interface RemoteCommonServiceClient { /** * 調用遠程方法 * @return */ @GetMapping(value = "/hello") String remoteCommonServiceHello(); }
實現FeignClient中定義的回調類
/** * <p> * @Component注冊為一個組件,實現RemoteCommonServiceClient,重寫方法定義回調 * <p> * @author Calvin * @date 2019/10/24 * @since 1.0 */ @Component public class RemoteCommonServiceCallback implements RemoteCommonServiceClient { @Override public String remoteCommonServiceHello() { return "something error, this is callback"; } }
application.yml中開啟Feign對Hystrix的支持
feign: hystrix: enabled: true
具體測試,可以通過停掉需要被調用的遠程服務來測試,或者自己制造一些,服務在某段時間不可用,使線程睡眠等操作
增加依賴
<!-- Springboot監控 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- Hystrix Dashboard --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency>
啟動類增加注解開啟dashboard
/** * <p> * 啟動類,集合了服務注冊、FeignClient聲明式調用、開啟熔斷器、開啟熔斷器監控 * </p> * * @author Calvin * @date 2019/10/24 * @since 1.0 */ @SpringBootApplication @EnableEurekaClient @EnableFeignClients @EnableHystrix @EnableHystrixDashboard public class HystrixServerApplication { private static final Logger logger = LoggerFactory.getLogger(HystrixServerApplication.class); public static void main(String[] args) { SpringApplication.run(HystrixServerApplication.class,args); logger.info("hystrix server start up finished !"); } }
監控頁面觀察
step1:瀏覽器輸入http://localhost:8080/hystrix
step2:頁面填入 http://localhost:8080/hystrix.stream Dalay和Title自己填
step3: 沒有step3,以下是踩過的坑
地址欄輸入的和頁面填進去的東西一定不是同一個,輸錯了只能看到一直在ping,就像這樣
剛進去的時候是loading狀態的時候表著急,就像下圖,你只需要調用一下遠程服務
指標意義
注:此圖來源 https://blog.csdn.net/wm6752062/article/details/86136204 侵刪
新建服務turbine-monitor
pom.xml
<parent> <artifactId>hystrix-test</artifactId> <groupId>com.calvin.hystrix</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>turbine-monitor</artifactId> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-turbine</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
TurbineMonitorApplication
/** * <p> * 啟動類 * </p> * * @author Calvin * @date 2019/10/24 * @since */ @SpringBootApplication @EnableTurbine @EnableHystrix @EnableHystrixDashboard public class MonitorApplication { public static void main(String[] args) { SpringApplication.run(MonitorApplication.class,args); } }
application.yml
spring: application: name: turbine-monitor server: port: 8040 eureka: client: service-url: defaultZone: http://localhost:8010/eureka/ turbine: # 需要監控的服務名 app-config: common-service, hystrix-service # 服務名的集群 cluster-name-expression: new String("default")
啟動服務
瀏覽器:http://localhost:8040/hystrix
調用遠程服務
上述內容就是SpringCloud中如何使用Hystrix熔斷器,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。