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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

feign 第一次调用超时_Feign ,3步搞定 HTTP 请求

發(fā)布時(shí)間:2025/4/16 编程问答 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 feign 第一次调用超时_Feign ,3步搞定 HTTP 请求 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天要給大家介紹的主角是Feign 。


Feign是一個(gè)受到Retrofit,JAXRS-2.0和WebSocket啟發(fā)的Java到HTTP客戶端綁定器。 Feign的第一個(gè)目標(biāo)是降低HTTP API的復(fù)雜性。


官網(wǎng):https://github.com/OpenFeign/feign


1、首先導(dǎo)入maven坐標(biāo),我們選擇feign-jackson集成jackson解析json。10.X版本需要JDK1.8以上。

<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-jackson</artifactId><version>10.2.3</version> </dependency>

2、編寫接口使用注解來操作Feign如何發(fā)送http請(qǐng)求。

public interface LemonAPI {@RequestLine("GET /user/formGet?username={username}&password={password}")String get(@Param("username") String username, @Param("password") String password); }

3、在main方法中調(diào)用Feign.bulider()指定請(qǐng)求uri并且調(diào)用接口中的方法,最終在控制臺(tái)打印結(jié)果返回值。

public class App {public static void main(String[] args) {LemonAPI lemonAPI = Feign.builder().target(LemonAPI.class, "http://localhost:8899");String result = lemonAPI.get("abc", "123");System.out.println(result);} }

在定義接口時(shí),需要使用Feign接口注解定義Http請(qǐng)求類型、請(qǐng)求頭、請(qǐng)求體、請(qǐng)求參數(shù)等等。

例子1:

//請(qǐng)求方式POST,請(qǐng)求路徑/user/formPost @RequestLine("POST /user/formPost") //請(qǐng)求頭表單提交方式 @Headers("Content-Type: application/x-www-form-urlencoded;charset=UTF-8") //參數(shù)格式name1=value1&name2=value2,參數(shù)值由@Param對(duì)應(yīng)提供 @Body("username={username}&password={password}") String formPost(@Param("username") String username, @Param("password") String password);

例子2:

//請(qǐng)求方式GET 請(qǐng)求路徑/user/formGet?name1=value1&name2=value2,參數(shù)值由@Param對(duì)應(yīng)提供 @RequestLine("GET /user/formGet?username={username}&password={password}") String formGet(@Param("username") String username, @Param("password") String password);//請(qǐng)求方式GET 請(qǐng)求路徑/find,參數(shù)值由@QueryMap 提供,自動(dòng)添加到uri后面 @RequestLine("GET /find") String find(@QueryMap Map<String, Object> queryMap);

1、target() 指定接口類型和URL地址返回接口Http代理對(duì)象,從而通過代理對(duì)象調(diào)用方法發(fā)送HTTP請(qǐng)求。
除了target方法之外,還有一些可選方法。如下:


2、client() Feign 在默認(rèn)情況下使用的是 JDK 原生的 URLConnection 發(fā)送HTTP請(qǐng)求,通過client方法可配置其他HTTP客戶端,如HttpClient、OkHttpClient、Http2Client等。


3、options() 指定連接超時(shí)時(shí)長及響應(yīng)超時(shí)時(shí)長,單位毫秒。


4、retryer() 指定重試策略,參數(shù)分別是最小時(shí)間,最大時(shí)間,重連次數(shù)。


5、encoder() decoder() 指定編碼/解碼方式默認(rèn)是String,可配置Gson、Jackson、Sax等。


6、logger() logLevel() 指定日志和日志等級(jí),可配置SLF4J等。


注意:如果需要使用Jackson、SLF4J、Gson、Sax、OkHttpClient、Http2Client、HttpClient等需要導(dǎo)入對(duì)應(yīng)坐標(biāo)。


例子:

LemonApi lemonApi = Feign.builder()//使用OkHttpClient作為HTTP請(qǐng)求客戶端.client(new OkHttpClient())//1000ms連接超時(shí)、5000ms響應(yīng)超時(shí).options(new Options(1000, 5000))//基礎(chǔ)重連時(shí)間500ms,最大重連時(shí)間5000ms,嘗試重連次數(shù)3次(每次重連時(shí)間在基礎(chǔ)上*1.5但不能大于最大重連時(shí)間).retryer(new Retryer.Default(500,5000,3))//使用Jackson編碼和解碼.encoder(new JacksonEncoder()).decoder(new JacksonDecoder())//使用Feign自帶日志并輸出到項(xiàng)目路徑logs/http.log下.logger(new Logger.JavaLogger().appendToFile("logs/http.log"))//日志級(jí)別FULL,記錄請(qǐng)求和響應(yīng)所有信息。.logLevel(Logger.Level.FULL)//設(shè)置請(qǐng)求URL,對(duì)LemonApi接口創(chuàng)建HTTP代理類。.target(LemonApi.class, "http://localhost:8899"); //使用代理類發(fā)起HTTP請(qǐng)求 String formGet = lemonApi.formGet("abc", "123");

總結(jié)

以上是生活随笔為你收集整理的feign 第一次调用超时_Feign ,3步搞定 HTTP 请求的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。