摘要:公眾號樂園上編說了整合斷路器,這篇來看看如何整合斷路器,整合斷路器也是相對比較簡單的。默認已經自帶斷路器,所以不需要像整合斷路器那樣需要在的啟動類添加注解。但是自帶斷路器并沒有打開,需要做些額外的配置。
公眾號: java樂園
上編說了《RestTemplate+Ribbon整合斷路器Hystrix》,這篇來看看如何Feign整合斷路器Hystrix,Feign整合斷路器Hystrix也是相對比較簡單的。Feign默認已經自帶斷路器Hystrix,所以不需要像RestTemplate+Ribbon整合斷路器Hystrix那樣需要在SpringBoot的啟動類添加注解。但是Feign自帶斷路器并沒有打開,需要做些額外的配置。
feign: hystrix: enabled: true
1、 新建項目sc-eureka-client-consumer-feign-hystrix,對應的pom.xml文件如下
4.0.0 spring-cloud sc-eureka-client-consumer-feign 0.0.1-SNAPSHOT jar sc-eureka-client-consumer-feign http://maven.apache.org org.springframework.boot spring-boot-starter-parent 2.0.4.RELEASE org.springframework.cloud spring-cloud-dependencies Finchley.RELEASE pom import UTF-8 1.8 1.8 org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-openfeign
備注:從繼續(xù)關系可以看出spring-cloud-starter-openfeign已經集成斷路器Hystrix
2、 新建springboot啟動類
package sc.consumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableEurekaClient @EnableFeignClients public class ConsumerFeignApplication { public static void main(String[] args) { SpringApplication.run(ConsumerFeignApplication.class, args); } }
3、 新建配置文件bootstrap.yml和application.yml
bootstrap.yml
server: port: 5800 application.yml spring: application: name: sc-eureka-client-consumer-feign-hystrix eureka: client: registerWithEureka: true #是否將自己注冊到Eureka服務中,默認為true fetchRegistry: true #是否從Eureka中獲取注冊信息,默認為true serviceUrl: defaultZone: http://localhost:5001/eureka/ feign: hystrix: enabled: true
說明:在application.yml配置文件添加了開啟斷路器Hystrix的配置項
4、 新建服務消費者類UserService.java
package sc.consumer.service; import java.util.Map; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import sc.consumer.model.User; import sc.consumer.service.hystrix.UserServiceHystrix; @FeignClient(value="sc-eureka-client-provider", fallback=UserServiceHystrix.class) public interface UserService { @GetMapping("/user/getUser/{id}") MapgetUser(@PathVariable(value ="id") Long id); @RequestMapping("/user/listUser") Map listUser(); @PostMapping("/user/addUser") Map addUser(@RequestBody User user); @PutMapping("/user/updateUser") Map updateUser(@RequestBody User user); @DeleteMapping("/user/deleteUser/{id}") Map deleteUser(@PathVariable(value ="id") Long id); }
可以看到在該類的FeignClient注解上添加了一個屬性fallback
5、 新建斷路器處理類UserServiceHystrix.java
package sc.consumer.service.hystrix; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Component; import sc.consumer.model.User; import sc.consumer.service.UserService; @Component public class UserServiceHystrix implements UserService{ @Override public MapgetUser(Long id) { Map result = new HashMap (); result.put("code", "000000"); result.put("msg", "success"); User u = new User(); u.setId(-1L); u.setUserName("failBackName"); result.put("body", u); return result; } @Override public Map listUser() { Map result = new HashMap (); result.put("code", "000000"); result.put("msg", "success"); List list = new ArrayList (); User u = new User(); u.setId(-1L); u.setUserName("failBackName"); list.add(u); result.put("body", list); return result; } @Override public Map addUser(User user) { Map result = new HashMap (); result.put("code", "000000"); result.put("msg", "success"); result.put("body", 0); return result; } @Override public Map updateUser(User user) { Map result = new HashMap (); result.put("code", "000000"); result.put("msg", "success"); result.put("body", 0); return result; } @Override public Map deleteUser(Long id) { Map result = new HashMap (); result.put("code", "000000"); result.put("msg", "success"); result.put("body", 0); return result; } }
該類實現了UserService接口,并實現了該接口的所有方法。
6、 分別啟動注冊中心sc-eureka-server和服務提供者sc-eureka-client-provider
7、 啟動sc-eureka-client-consumer-feign-hystrix,并驗證是否啟動成功
方式一:查看日志看看對應的端口是啟動
方式二:查看注冊中心是否注冊成功
8、 使用postman驗證斷路器是否啟用
上篇從服務提供者是否正常啟動驗證斷路器是否啟動,今天看看從數據庫是否啟動來驗證斷路器是否啟動
(1)MySQL服務正常啟動時訪問:
http://127.0.0.1:5800/feign/user/listUser
(2)MySQL服務關閉時訪問
http://127.0.0.1:5800/feign/user/listUser
再看下后臺日志:
其他接口可以自行按照以上方式進行驗證,看看斷路器是否啟動
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76053.html
摘要:多層服務調用常見于微服務架構中較底層的服務如果出現故障,會導致連鎖故障。 Spring Cloud 體驗 簡介 Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)的一些工具,包括配置管理、服務發(fā)現、斷路器、路由、微代理、 事件總線、全局鎖、決策競選、分布式會話等等 基于Spring Boot,Spring Cloud將各公司成熟服務框架組合起來,通過Spring Boo...
摘要:開公眾號差不多兩年了,有不少原創(chuàng)教程,當原創(chuàng)越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章系列處理登錄請求前后端分離一使用完美處理權限問題前后端分離二使用完美處理權限問題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開公眾號差不多兩年了,有不少原創(chuàng)教程,當原創(chuàng)越來越多時,大家搜索起來就很不方便,因此做了一個索引幫助大家快速找到需要的文章! Spring Boo...
摘要:服務注冊中心一個服務注冊中心,所有的服務都在注冊中心注冊,負載均衡也是通過在注冊中心注冊的服務來使用一定策略來實現。在客戶端實現了負載均衡。 文章參考于史上最簡單的 SpringCloud 教程 | 終章 Spring Cloud 是一個微服務框架,與 Spring Boot 結合,開發(fā)簡單。將一個大工程項目,分成多個小 web 服務工程,可以分別獨立擴展,又可以共同合作。 環(huán)境 ...
摘要:在該配置中,加入這個方法的話,表明使用了該配置的地方,就會禁用該模塊使用容災降級的功能添加訪問層添加電影微服務啟動類電影微服務,定制,一個功能禁用,另一個功能啟用。 SpringCloud(第 016 篇)電影微服務,定制Feign,一個Feign功能禁用Hystrix,另一個Feign功能啟用Hystrix - 一、大致介紹 1、在一些場景中,部分功能需要使用斷路器功能,部分功能不需...
閱讀 3699·2021-11-11 16:55
閱讀 1646·2021-10-08 10:04
閱讀 3581·2021-09-27 13:36
閱讀 2761·2019-08-30 15:53
閱讀 1855·2019-08-30 11:17
閱讀 1259·2019-08-29 16:55
閱讀 2098·2019-08-29 13:57
閱讀 2513·2019-08-29 13:13