天天看點

Java應用與HTTP服務之間的粘合劑OpenFeign詳解

OpenFeign曾用名Netflix Feign,最新版本是2018.5釋出的9.7.0。

OpenFeign是Java應用中編寫Web服務的用戶端的利器,基于第三方HTTP用戶端類庫,聲明式地建構Web服務的用戶端應用,以調用Web服務。OpenFeign在Java應用中,負責處理與遠端Web服務的請求響應,最大限度降低編碼複雜性。

1. HTTP用戶端類庫

OpenFeign預設使用Java的HttpURLConnection作為HTTP請求用戶端。

OpenFeign也可以使用類似Jersey/CXF的HTTP用戶端類庫,編寫Java用戶端以通路HTTP服務。

OpenFeign也可以直接使用已有公共第三方HTTP用戶端類庫,如Apache HttpComponents, OKHttp,編寫Java用戶端以通路HTTP服務。

2. JSON編解碼類庫

OpenFeign可以采用支援Jackson, Gson兩種JSON編解碼類庫,JSON編解碼用法如下:

Feign.builder().encoder(new GsonEncoder())
Feign.builder().decoder(new GsonDecoder())

Feign.builder().encoder(new JacksonEncoder())
Feign.builder().decoder(new JacksonDecoder())
           

3. XML編解碼類庫

OpenFeign支援JAXB規範的XML編解碼類庫,用法如下:

Feign.builder().encoder(new JAXBEncoder())
Feign.builder().decoder(new JAXBDecoder())
           

4. 內建Apache HttpComponents HttpClient

Feign.builder().client(new ApacheHttpClient())
           

5. 內建OKHttp

Feign.builder().client(new OkHttpClient()).target(...)
           

6. 內建Ribbon

Feign.builder().client(RibbonClient.create()).target(...)
           

7. 內建Hystrix

HystrixFeign.builder().target(...)
           

8. 應用示例

1) 在Java應用中定義遠端HTTP服務接口

public interface BaiduService {
	@RequestLine("GET /{owner}/editors/{lastName}")
	List<Editor> editors(@Param("owner") String owner, @Param("lastName") String lastName);
}
           

2) 在Java應用中定義對象模型

隻需要給出屬性

public class Editor {
    String name;
}//a model, no constructor, no getter/setter
           

3) 在Java應用中定義HTTP服務對象,并發出HTTP請求

BaiduService server = Feign.builder()
    .decoder(new GsonDecoder())
    .target(BaiduService.class, "https://www.baidu.com");
List<Editor> editorsHan = server.editors("champagne", "Han");
           

參考連結:

https://github.com/OpenFeign/feign

繼續閱讀