微服務深入淺出(5)-- 聲明式調用Feign


Feign的使用

Feign采用了聲明式的API接口的風格,將Java Http客戶端綁定到它的內部,從而調用過程變的簡單。

配置文件:

spring:
  application:
    name: eureka-feign-client
server:
  port: 8765
eureka:
  client:
    service-url:
      defaultZone: http://localhost:9001/eureka/

啟動類:

@SpringBootApplication
@EnableEurekaClient @EnableFeignClients public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

Feign Config:

@Configuration
public class FeignConfig {
    @Bean
    public Retryer feignRetryer() {
        return new Retryer.Default(100, SECONDS.toMillis(1), 5);
    }
}

實現Feign Client接口:

@FeignClient(value = "hi-service", configuration = FeignConfig.class) public interface EurekaClientFeign {

    @GetMapping(value = "/hi")
    String sayHiFromClientEureka(@RequestParam(value = "name") String name);

}

經過這幾個步驟后,就可以完成Feign對Eureka服務的調用了。

FeignClient的配置

默認的配置類為FeignClientsConfiguration,這個類注入了很多Feign相關的配置Bean,包括FeignRetryer.FeignLoggerFactory和FormattingConversionService等。

另外Decoder、Encoder和Contract這三個類沒有Bean注入的情況下,會自動注入默認配置Bean,即ResponseEntityDecoder、SpringEncoder和SpringMvcContract。

我們可以重寫FeignClientsConfiguration中的Bean,覆蓋默認的配置Bean,從而達到自定義配置的目的。

Feign中使用HttpClent和OkHttp

Feign默認使用HttpUrlConnection來實現網絡請求,但它還支持其他網絡請求框架。只要pom.xml配置上feign-okhttp或者feign-httpclinet的依賴,然后配置文件上配置feign.httpclient.enabled或者feign.okhttp.enabled為true就可以啟用了。

總結

1、@EnableFeignClients注解開啟FeignClient功能。只有這個注解存在,程序才會開啟對@FeignClient注解的包掃描

2、更具Feign的規則實現接口,並在接口上面加@FeignClient注解

3、程序啟動后,掃描所有的@FeignClient的注解的類,並將這些信息注入到IOC容器

4、當接口被調用時,通過JDK代理生成巨日的RequestTemplate模板對象

5、根據RequestTemplate生成Http請求的Request對象

6、Request對象交給Client(HttpUrlConnection/HttpClient/OkHttp)處理

7、最后Client被封裝到LoadBalanceClient中,結合Ribbon做負載均衡


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM