1、Ribbon中使用熔斷器spring
服務調用方有兩種方式Ribbon與Feign,如今Ribbon上使用,首先在項目上服務器
添加依賴網絡
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>app
在 Application 中增長 @EnableHystrix 註解ide
[url=]測試
[/url]
@EnableDiscoveryClient@SpringBootApplication@EnableHystrixpublicclassConsumerDeptRibbonApplication { publicstaticvoidmain(String[] args) { SpringApplication.run(ConsumerDeptRibbonApplication.class, args); }}[url=]url
[/url]rest
在 Service 中增長 @HystrixCommand 註解xml
在須要有熔斷機制的方法上添加@HystrixCommand,屬性fallbackMethod是熔斷時返回的方法:繼承
[url=]
[/url]
@ServicepublicclassDeptService { @Autowired privateRestTemplate restTemplate; @HystrixCommand(fallbackMethod = "hiError") publicString sayHi(String message) { //這裏指指定了服務名稱,不用管ip 地址與端口 returnrestTemplate.getForObject("http://SPRING-CLOUD-LEARN-PROVIDER-DEPT/hi?message=" + message, String.class); } publicString hiError(String message) { return"Hi,your message is :"" + message + "" but request error."; }}[url=]
[/url]
這樣就已經完成了開發,咱們進行相應的測試
啓動spring-cloud-learn-eureka註冊中心,啓動部門服務提供者spring-cloud-learn-provider-dept,而後啓動spring-cloud-learn-consumer-dept-ribbon,這個時候服務正常,咱們能獲得正常的反饋,與以前相同,然咱們停掉spring-cloud-learn-provider-dept,而後再刷新http://localhost:8764/hi?message=hello,會發現:
回到頂部
2、Feign中使用熔斷器
Feign 是自帶熔斷器的,但默認是關閉的。須要在配置文件中配置打開它,在配置文件增長如下代碼:
feign: hystrix: enabled:true
而後咱們建立一個與服務對應相關的專門應對熔斷的類:
[url=]
[/url]
@ComponentpublicclassDeptServiceHystriximplementsDeptService { @Override publicString sayHi(String message) { return"Hi,your message is :"" + message + "" but request error."; }}[url=]
[/url]
這個類繼承DeptService,而後實現對應當出現熔斷時提供的反饋服務,而後在原先的服務中增長fallback指定類
[url=]
[/url]
//服務提供者的名字@FeignClient(value = "spring-cloud-learn-provider-dept", fallback = DeptServiceHystrix.class)publicinterfaceDeptService { @RequestMapping(value = "hi", method = RequestMethod.GET) String sayHi(@RequestParam(value = "message") String message);}[url=]
[/url]
而後啓動spring-cloud-learn-consumer-dept-feign,在部門服務掛掉以後,也能實現熔斷效果
還有一種建立工廠的方式,新建一個DeptServiceFallbackFactory:
[url=]
[/url]
@ComponentpublicclassDeptServiceFallbackFactoryimplementsFallbackFactory<DeptService> { @Override publicDeptService create(Throwable throwable) { returnnewDeptService() { @Override publicString sayHi(String message) { return"Hi,your message is :"" + message + "" but request error."; } }; }}[url=]
[/url]
回到頂部
3、熔斷器儀表盤監控
除了隔離依賴服務的調用之外,Hystrix還提供了準實時的調用監控(Hystrix Dashboard),Hystrix會持續地記錄全部經過Hystrix發起的請求的執行信息,並以統計報表和圖形的形式展現給用戶,包括每秒執行多少請求多少成功,多少失敗等。Netflix經過hystrix-metrics-event-stream項目實現了對以上指標的監控。Spring Cloud也提供了Hystrix Dashboard的整合,對監控內容轉化成可視化界面。
在 Ribbon 和 Feign 項目增長 Hystrix 儀表盤功能,兩個項目的改造方式相同:
在 pom.xml 中增長依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency>
**在 Application 中增長 @EnableHystrixDashboard 註解
**
[url=]
[/url]
@SpringBootApplication@EnableDiscoveryClient@EnableFeignClients@EnableHystrixDashboardpublicclassConsumerDeptFeignApplication { publicstaticvoidmain(String[] args) { SpringApplication.run(ConsumerDeptFeignApplication.class, args); }}[url=]
[/url]
建立 hystrix.stream 的 Servlet 配置
Spring Boot 2.x 版本開啓 Hystrix Dashboard 與 Spring Boot 1.x 的方式略有不一樣,須要增長一個 HystrixMetricsStreamServlet 的配置,代碼以下:
[url=]
[/url]
@ConfigurationpublicclassHystrixDashboardConfiguration { @Bean publicServletRegistrationBean getServlet() { HystrixMetricsStreamServlet streamServlet =newHystrixMetricsStreamServlet(); ServletRegistrationBean registrationBean =newServletRegistrationBean(streamServlet); registrationBean.setLoadOnStartup(1); registrationBean.addUrlMappings("/hystrix.stream"); registrationBean.setName("HystrixMetricsStreamServlet"); returnregistrationBean; }}[url=]
[/url]
而後啓動項目,打開地址:http://localhost:8765/hystrix,這裏就能夠看到儀表盤啓動成功了
1:Delay:該參數用來控制服務器上輪詢監控信息的延遲時間,默認爲2000毫秒,能夠經過配置該屬性來下降客戶端的網絡和CPU消耗。
2:Title:該參數對應了頭部標題Hystrix Stream以後的內容,默認會使用具體監控實例的URL,能夠經過配置該信息來展現更合適的標題。