亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java使用OpenFeign管理多個第三方服務調(diào)用

 更新時間:2021年06月16日 10:53:00   作者:Ygria  
最近開發(fā)了一個統(tǒng)一調(diào)度類的項目,需要依賴多個第三方服務,這些服務都提供了HTTP接口供我調(diào)用。感興趣的可以了解一下

背景

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

組件架構

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

常用的服務間調(diào)用往往采用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類型,其他參數(shù)會被序列化為String,所以若第三方接口參數(shù)的值為POJO(或Map),可能會出錯。
  • 對于POJO參數(shù),若第三方參數(shù)名含有Java中不合法的屬性字符(如 ”-“,”#“,”.“等),可使用注解進行序列化時的轉化。由于聲明Feign Client時使用的encoder是Gson,所以使用如下注解:
 @SerializedName(value="aaa-bbb")
 private String aaaBbb;

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

小結

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

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

到此這篇關于Java使用OpenFeign管理多個第三方服務調(diào)用的文章就介紹到這了,更多相關Java 第三方服務調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java書店系統(tǒng)畢業(yè)設計 用戶模塊(2)

    java書店系統(tǒng)畢業(yè)設計 用戶模塊(2)

    這篇文章主要介紹了java書店系統(tǒng)畢業(yè)設計,第二步系統(tǒng)總體設計,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • java中如何判斷JSONObject是否存在某個Key

    java中如何判斷JSONObject是否存在某個Key

    這篇文章主要介紹了java中如何判斷JSONObject是否存在某個Key,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java接口方法默認靜態(tài)實現(xiàn)代碼實例

    Java接口方法默認靜態(tài)實現(xiàn)代碼實例

    這篇文章主要介紹了Java接口方法默認靜態(tài)實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot3.2.2整合MyBatis-Plus3.5.5依賴不兼容的問題解決

    SpringBoot3.2.2整合MyBatis-Plus3.5.5依賴不兼容的問題解決

    這篇文章給大家介紹了Spring Boot 3.2.2整合MyBatis-Plus 3.5.5依賴不兼容問題,文中通過代碼示例和圖文介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • java 中序列化NotSerializableException問題解決辦法

    java 中序列化NotSerializableException問題解決辦法

    這篇文章主要介紹了java 中序列化NotSerializableException問題解決辦法的相關資料,這里對序列化問題進行描述說明,并提供解決辦法,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • idea查看java文件的全部接口的操作方法

    idea查看java文件的全部接口的操作方法

    在Java項目開發(fā)中,快速查看和理解接口至關重要,通過IntelliJ IDEA,開發(fā)人員可以高效地瀏覽Java文件中的所有接口信息,本文介紹了在IDEA中實現(xiàn)查看Java文件全部接口的方法,感興趣的朋友一起看看吧
    2024-10-10
  • Java鎖之可重入鎖介紹

    Java鎖之可重入鎖介紹

    這篇文章主要介紹了Java鎖之可重入鎖介紹,可重入鎖,也叫做遞歸鎖,指的是同一線程外層函數(shù)獲得鎖之后,內(nèi)層遞歸函數(shù)仍然有獲取該鎖的代碼,但不受影響,需要的朋友可以參考下
    2014-11-11
  • java string的一些細節(jié)剖析

    java string的一些細節(jié)剖析

    首先說明這里指的是Java中String的一些細節(jié)部分,需要的朋友可以參考
    2012-11-11
  • JavaSE遞歸求解漢諾塔問題的思路與方法

    JavaSE遞歸求解漢諾塔問題的思路與方法

    遞歸是一種非常重要的算法思想,無論你是前端開發(fā),還是后端開發(fā),都需要掌握它,下面這篇文章主要給給大家介紹了關于JavaSE遞歸求解漢諾塔問題的思路與方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Java中的訪問修飾符詳細解析

    Java中的訪問修飾符詳細解析

    以下是對Java中的訪問修飾符進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09

最新評論