日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

六十

發布時間:2024/1/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 六十 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,我們需要將 Feign 的基礎依賴引入項目,因為我們只使用 Feign 的 remote 功能,因此,只引入基礎依賴。

此外在項目中,我們還自定義了了 JSON 轉換和 log 設置,因此還需要引入這些的第三方依賴,如下所示。

<!-- feign --><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-core</artifactId><version>10.10.1</version></dependency><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-gson</artifactId><version>10.10.1</version></dependency><dependency><groupId>io.github.openfeign</groupId><artifactId>feign-slf4j</artifactId><version>10.10.1</version></dependency>

發送路徑和方法設置
然后,因為 Feign 是一種申明式的調用,因此我們需要配置發送的接口路徑和發送接口定義,看下面的例子。

@RequestLine("GET /user/getone?arkOrgId={arkOrgId}&userId={userId}") JSONObject getOneStaff(@Param("arkOrgId") String arkOrgId,@Param("userId") String userId);@RequestLine("POST /user/add") @Headers("Content-Type: application/json") @Body("{body}") JSONObject saveStaff(@Param("body") SaveEmployeeDTO saveEmployeeDTO);

在代碼實例中,我們定義了兩種發送的實例,一種是 GET 請求,一種是 POST 請求,下面,我們分別來看一下其中的代碼的作用是什么。

@RequestLine:定義發送方式和發送接口定義,其中用 GET 和 POST 來定義發送方式,然后空格后,寫上 servelt path(context path 和域名或ip端口號在其他地方配置);
{}:用來作為占位符,動態填充需要的參數;
@Param:用來匹配 URI 中的占位符;
@Headers(“Content-Type: application/json”):構建請求表頭,在 POST 請求中,需要聲明該請求的發送格式為 json;
@Body:POST 請求,需要標注請求體;
JSONObject:在本實例中,采用是一個通用的 json 對象來接收,方便統一,在自己的代碼中,也可以定義一個接受實體類來接受,作用是一樣的。
POST 請求,需要在實體中重寫 toString() 方法,使其在發送時調用該方法后,是一個 JSON 字符串,詳細見后文 Tips 中寫的。

定義發送客戶端
@Configuration
public class FeignConfig {
public static final String DATE_TIME_FORMAT = “yyyy-MM-dd HH:mm:ss”;
@Value("${staff.base.url}")
private String staffBaseUrl;
@Bean
public StaffFeignService staffFeignService() {
GsonBuilder builder = new GsonBuilder();
builder.setDateFormat(DATE_TIME_FORMAT);
return Feign.builder()
.retryer(closeFeignRetry())
.decoder(new GsonDecoder(builder.create()))
.encoder(new GsonEncoder())
.logger(new Slf4jLogger())
.logLevel(Logger.Level.FULL)
.target(StaffFeignService.class, staffBaseUrl);
}
/**
* 關閉feign的失敗重試功能
*/
@Bean
public Retryer closeFeignRetry() {
return Retryer.NEVER_RETRY;
}

@Bean public Request.Options options() {return new Request.Options(15000, 30000); }

}
緊接著,我們來定義發送客戶端。

首先,我們采用 @Value 來動態添加路由,這樣,就可以根據在配置文件中的屬性來添加 context path,從而做到可拓展。

然后,feign 的很多配置都是可以根據自身項目需要在 DIY 的,因此在這里,我們配置了編解碼采用 GSON 的編解碼器,日志級別設置全打印。通過該設置來生成一個 Feign 客戶端。

Feign 官方文檔,在官方文檔中,有詳細的配置說明,根據自身需要使用,即可。

使用
@Autowired
StaffFeignService staffFeignService;

// get 請求
JSONObject saveSingleQrCode = staffFeignService.saveSingleQrCode(userId);

// post 請求
SaveMultiQrCodesDTO saveMultiQrCodesDTO = new SaveMultiQrCodesDTO();;
JSONObject saveMultiQrCodes = staffFeignService.saveMultiQrCodes(saveMultiQrCodesDTO);
通過該方式,即可發送對應請求。

Tips
記錄一些在使用中的重點,需要注意。

重寫 toString() 方法
在發送 JSON 時,需要重寫 toString() 方法,否則會導致接受方,無法用 json 進行解析。

@Override public String toString() {return JSON.toJSONString(this); }

異步客戶端
有時候,我們使用異步發送,從而不影響我們的主體業務,Feign 也支持該種配置。

@Bean public IHermesFeignService hermesFeignService() {GsonBuilder builder = new GsonBuilder();builder.setDateFormat(DATE_TIME_FORMAT);return AsyncFeign.asyncBuilder().decoder(new GsonDecoder(builder.create())).encoder(new GsonEncoder(builder.create())).logger(new Slf4jLogger()).logLevel(Logger.Level.FULL).target(IHermesFeignService.class, hermesBaseUrl); }

總結

以上是生活随笔為你收集整理的六十的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。