溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java使用OpenFeign管理多個第三方服務的方法

發(fā)布時間:2021-06-16 13:38:51 來源:億速云 閱讀:180 作者:chen 欄目:開發(fā)技術

本篇內容主要講解“Java使用OpenFeign管理多個第三方服務的方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java使用OpenFeign管理多個第三方服務的方法”吧!

目錄
  • 背景

  • 應用

    • maven依賴

  • 配置和服務聲明

    • 服務地址配置

    • 第三方服務配置

    • 接口聲明和使用

  • 小結

    背景

    最近開發(fā)了一個統一調度類的項目,需要依賴多個第三方服務,這些服務都提供了HTTP接口供我調用。

    Java使用OpenFeign管理多個第三方服務的方法

    組件架構

    服務多、接口多,如何進行第三方服務管理和調用就成了問題。

    常用的服務間調用往往采用zk、Eureka等注冊中心進行服務管理(SpringBoot常使用SpringCloud)。OpenFeign也是SpringCloud的解決方案之一。我們單獨使用OpenFeign, 無需對原有第三方服務進行改動,本服務開發(fā)時的引入也很輕量。

    下面給出我的用法。

    應用

    maven依賴

    引入maven依賴:

       <dependency>
               <groupId>io.github.openfeign</groupId>
               <artifactId>feign-core</artifactId>
               <version>10.2.3</version>
           </dependency>
           <dependency>
               <groupId>io.github.openfeign</groupId>
               <artifactId>feign-gson</artifactId>
               <version>10.2.3</version>
           </dependency>
           <dependency>
               <groupId>io.github.openfeign.form</groupId>
               <artifactId>feign-form</artifactId>
               <version>3.8.0</version>
           </dependency>
           <dependency>
               <groupId>io.github.openfeign.form</groupId>
               <artifactId>feign-form-spring</artifactId>
               <version>3.8.0</version>
           </dependency>

    其中,form相關引入是為了解決ContentType為application/x-www-form-urlencoded和multipart/form-data的編碼問題。

    配置和服務聲明

    第三方服務的地址通過配置來注入。

    服務地址配置

    ThirdpartServiceConfig.java

    @Data
    @Component
    @ConfigurationProperties(prefix = "thirdpart-service")
    public class ThirdpartServiceConfig {
        private String serviceA;
        private String serviceB;
        private String serviceC;
    }

    服務配置(超時時間配置等也可以寫在這里) application.yaml

    thirdpart-service:
      serviceA: http://****:***/
      serviceB:  http://****:***/
      serviceC:  http://****:***/

    第三方服務配置

    因為聲明方法一致,所以省略了多個第三方聲明。 ThirdPartClientConfig.java

    @Configuration
    public class ThirdParttClientConfig {
    
        @Resource
        private ThirdpartServiceConfig thirdpartServiceConfig;
    
        @Bean
        public ServiceAClient serviceAClient() {
            return Feign.builder()
                .encoder(new FormEncoder(new GsonEncoder()))
                .decoder(new GsonDecoder())
                .target(ServiceAClient.class, thirdpartServiceConfig.getServiceA());
        }
    }

    接口聲明和使用

    完成了服務的聲明和服務的配置之后,就可以進行服務接口的聲明了。具體聲明方法可以參看OpenFeign文檔:# 翻譯: Spring Cloud Feign使用文檔

    下面給出使用示例:

    GET請求(feign可直接將返回的結果反序列化為本服務中定義的POJO)

    @RequestLine("GET testGet?a={a}&b=")
    ServiceResp testGet(@Param("a") String a,@Param("b")String b);

    GET 下載使用feign.Response接收請求結果

    @RequestLine("GET export?exportId={exportId}")
    Response exportFromServiceA(@Param("exportId")String exportId);
    @Resource
    private ServiceAClient serviceAClient ;
    
    // 導出方法
    public void export(exportId) {
        Response serviceResponse = serviceserviceAClient.exportFromServiceA(exportId);
        Response.Body body = serviceResponse.body();
        try(InputStream inputStream = body.asInputStream();
            // 處理獲取到的inputStream
        } catch (IOException e) {
        log.error("導出發(fā)生異常",e);
    }

    POST application/json"

     @RequestLine("POST /save")
     @Headers("Cofntent-Type: application/json")
      ServiceResp saveEntity(EntityPOJO entityPOJO);

    POST form

     @RequestLine("POST  uqa/repo/qa/batch")
     @Headers("Content-Type:multipart/form-data")
     ServiceResp uploadFile(@Param("id")String id, @Param("batch_file") File file);
    • 注意:除了file類型,其他參數會被序列化為String,所以若第三方接口參數的值為POJO(或Map),可能會出錯。

    • 對于POJO參數,若第三方參數名含有Java中不合法的屬性字符(如 ”-“,”#“,”.“等),可使用注解進行序列化時的轉化。由于聲明Feign Client時使用的encoder是Gson,所以使用如下注解:

     @SerializedName(value="aaa-bbb")
     private String aaaBbb;

    如果使用的是其他序列化工具,改為對應的注解即可。

    小結

    使用聲明式的第三方和接口寫法,基本覆蓋了請求第三方接口的需求,也易于拓展和管理。

    我計劃在后續(xù)添加統一的鑒權、日志打印和異常捕獲處理功能,使依賴組件引入的風險更為可控。OpenFeign幫我們實現了服務聲明、接口聲明、HTTP請求發(fā)送和結果處理等邏輯,在項目需要調用多個第三方服務時可以使用。

    到此,相信大家對“Java使用OpenFeign管理多個第三方服務的方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI