1. 程式人生 > 實用技巧 >SpringCloud Feign在遠端呼叫中傳輸檔案

SpringCloud Feign在遠端呼叫中傳輸檔案

1. 檔案遠端傳輸主要涉及3點: 請求方式, 媒體型別, 序列化與反序列化, 把握住了這3點,基本上就可以搞

2. 使用Feign傳輸,首先搭建起Feign的架子

  2.1 引入spring-cloud-starter-eureka-server依賴,用於啟動一個eureka註冊中心

  2.2 引入spring-cloud-starter-eureka依賴,用於開啟向eureka註冊中心註冊自己

  2.3 在呼叫遠端服務的客戶端引入spring-cloud-starter-feign, 用於使用feign

3. 既然是遠端呼叫, 專案中就必須至少有2個服務,一個扮演客戶端,一個扮演服務端,對於檔案上傳來說,可以將檔案上傳服務定為客戶端,將檔案的處理服務定為服務端.客戶端接收到檔案後呼叫服務端處理檔案

  3.1 建立一個eureka註冊中心

  3.2 建立一個客戶端

  3.3 建立一個服務端

4. 基礎架構搭建好了以後,可以在2個服務中都搭建基礎的上傳服務介面了,測試上傳檔案沒問題後,可以進行Feign的呼叫搭建

  4.1 使用POST請求

  4.2 指定介面接收的資料型別為multipart/form-data

  4.3 使用MultipartFile型別接收檔案

5. Feign的呼叫搭建

  5.1 誰使用Feign就在誰的配置中開啟支援註解@EnableFeignClients

  5.2 建立Feign的基樁,在介面類上繫結要呼叫服務的服務ID,在介面方法上繫結要呼叫方法的請求路徑,同時指定媒體型別

6. 此時重啟2個服務,呼叫試試,發現報錯,原因是編碼問題,此時就是序列化和反序列化的問題,需要:

  6.1 引入2個包,用於編碼的支援

<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.0.3</version>
</dependency>

  6.2 給容器增加一個Bean,用於具體的編碼支援

@Bean
public Encoder encoder(){
return new SpringFormEncoder();
}

7. 總結

  傳檔案主要盯住3樣東西: POST請求方式, multipart/form-data媒體型別,遠端呼叫的序列方案