Spring Cloud第七篇 | 聲明式服務調用Feign

本文是Spring Cloud專欄的第七篇文章,瞭解前六篇文章內容有助於更好的理解本文:html

  1. Spring Cloud第一篇 | Spring Cloud前言及其經常使用組件介紹概覽git

  2. Spring Cloud第二篇 | 使用並認識Eureka註冊中心spring

  3. Spring Cloud第三篇 | 搭建高可用Eureka註冊中心app

  4. Spring Cloud第四篇 | 客戶端負載均衡Ribbon負載均衡

  5. Spring Cloud第五篇 | 服務熔斷Hystrixide

  6. Spring Cloud第六篇 | Hystrix儀表盤監控Hystrix Dashboard微服務

1、Feign是什麼

    Feign是Netflix公司開發的一個聲明式的REST調用客戶端; Ribbon負載均衡、 Hystrⅸ服務熔斷是咱們Spring Cloud中進行微服務開發很是基礎的組件,在使用的過程當中咱們也發現它們通常都是同時出現的,並且配置也都很是類似,每次開發都有不少相同的代碼,所以Spring Cloud基於Netflix Feign整合了Ribbon和Hystrix兩個組件,讓咱們的開發工做變得更加簡單, 就像Spring boot是對Spring+ SpringMVC的簡化, Spring Cloud Feign對Ribbon負載均衡、 Hystrⅸ服務熔斷進行簡化,在其基礎上進行了進一步的封裝,不只在配置上大大簡化了開發工做,同時還提供了一種聲明式的Web服務客戶端定義方式。使用方式相似Dubbo的使用方式。測試

2、使用Feign實現消費者

一、建立消費者服務命名爲(springcloud-service-feign)fetch

二、添加依賴url

<dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

三、在啓動類上添加註解

@EnableFeignClients

四、聲明服務

    定義一個HelloService接口,經過@FeignClient註解來指定服務名稱進而綁定服務,而後在經過Spring  MVC中提供的註解來綁定服務提供者的接口,以下:

//使用feign的客戶端註解綁定遠程的名稱,名稱能夠是大寫,也能夠小寫
@FeignClient(value = "springcloud-service-provider") public interface HelloService { //聲明一個方法,這個方法就是遠程的服務提供者提供的方法
    @RequestMapping("/provider/hello") public String hello(); }

五、使用Controller中調用服務,代碼以下

 @Autowired private HelloService helloService; @RequestMapping("/hello") public String hello(){ //調用聲明式接口方法,實現對遠程服務的調用
        return helloService.hello(); }

六、application.yml配置以下

spring: application: name: springcloud-service-feign server: port: 9091 eureka: client: service-url: defaultZone: http://localhost:8700/eureka
 #客戶端每隔30秒從Eureka服務上更新一次服務信息 registry-fetch-interval-seconds: 30 #須要將個人服務註冊到eureka上 register-with-eureka: true #須要檢索服務 fetch-registry: true #心跳檢測檢測與續約時間 instance: #告訴服務端,若是我10s以內沒有給你發心跳,就表明我故障了,將我剔除掉,默認90s #Eureka服務端在收到最後一次心跳以後等待的時間上限,單位爲秒,超過則剔除(客戶端告訴服務端按照此規則等待本身) lease-expiration-duration-in-seconds: 10 #每隔2s向服務端發送一次心跳,證實自已依然活着,默認30s #Eureka客戶端向服務端發送心跳的時間間隔,單位爲秒(客戶端告訴服務端本身會按照該規則) lease-renewal-interval-in-seconds: 2

七、啓動測試,訪問地址http://localhost:9091/feign/hello

3、使用Feign支持的特性

負載均衡:

    Spring Cloud提供了Ribbon來實現負載均衡,使用Ribbo直接注入一個RestTemplate對象便可, RestTemplate已經作好了負載均衡的配置在Spring Cloud下,使用 Feign也是直接能夠實現負載均衡的,定義一個有@FeignClient註解的接口,而後使用@RequestMappin註解到方法上映射遠程的REST服務,此方法也是作好負責均衡配置的。

服務熔斷:

一、在 application.yml文件開啓hystrix功能

#開啓hystrix熔斷機制 feign: hystrix: enabled: true

二、指定熔斷回調邏輯

@FeignClient(value = "springcloud-service-provider", fallback = MyFallback.class)
@Component public class MyFallback implements HelloService { @Override public String hello() { return "遠程服務不可用,暫時採用本地邏輯代替。。。。。"; } }

三、測試,讓服務提供者超時就好了

若是須要捕獲提供者拋出的異常能夠用:

@FeignClient(value = "springcloud-service-provider", fallbackFactory = MyFallbackFactory.class)
@Component public class MyFallbackFactory implements FallbackFactory<HelloService> { @Override public HelloService create(Throwable throwable) { return new HelloService() { @Override public String hello() { return throwable.getMessage(); } }; } }

 

詳細參考案例源碼:https://gitee.com/coding-farmer/springcloud-learn

原文出處:https://www.cnblogs.com/coding-farmer/p/12034706.html

相關文章
相關標籤/搜索