解決Spring Cloud Feign 請(qǐng)求時(shí)附帶請(qǐng)求頭的問(wèn)題
問(wèn)題描述
Feign 在請(qǐng)求時(shí)是不會(huì)將 request 的請(qǐng)求頭帶著請(qǐng)求的,導(dǎo)致假如 Feign 調(diào)用的接口需要請(qǐng)求頭的信息,比如當(dāng)前用戶的 token 之類的就獲取不到
解決方案 FeignConfiguration
通過(guò)實(shí)現(xiàn) Feign 的 RequestInterceptor 將從上下文中獲取到的請(qǐng)求頭信息循環(huán)設(shè)置到 Feign 請(qǐng)求頭中。
/**
* feign 配置文件
* 將請(qǐng)求頭中的參數(shù),全部作為 feign 請(qǐng)求頭參數(shù)傳遞
* @author: linjinp
* @create: 2020-06-28 09:54
**/
@Configuration
public class FeignConfiguration implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
requestTemplate.header(name, values);
}
}
}
}
使用
通過(guò) configuration = FeignConfiguration.class 指定這次 Feign 請(qǐng)求走哪種配置
@FeignClient(name = "admin", contextId = "factoryPlmseriesRelation", configuration = FeignConfiguration.class)
//@FeignClient(name = "admin2", contextId = "factoryPlmseriesRelation", url = "http://127.0.0.1:8582/", configuration = FeignConfiguration.class)
public interface FeignFactoryPlmseriesRelationService {
/**
* 根據(jù)當(dāng)前用戶,獲取工廠與PLM關(guān)聯(lián)關(guān)系
* @return
*/
@GetMapping(value = "/factoryPlmseriesRelation/getFactoryPlmseriesRelation")
ErrorMsg<List<FactoryPlmseriesRelationVo>> getFactoryPlmseriesRelation();
}
配置修改
主要是 hystrix.command.default.execution.isolation 后面的配置,需要將 hystrix 配置為信號(hào)量模式,否則會(huì)出現(xiàn)由于隔離策略導(dǎo)致獲取不到請(qǐng)求頭
# ribbon 配置
ribbon:
OkToRetryOnAllOperations: false #對(duì)所有操作請(qǐng)求都進(jìn)行重試,默認(rèn)false
ReadTimeout: 5000 #負(fù)載均衡超時(shí)時(shí)間,默認(rèn)值5000
ConnectTimeout: 5000 #ribbon請(qǐng)求連接的超時(shí)時(shí)間,默認(rèn)值2000
MaxAutoRetries: 0 #對(duì)當(dāng)前實(shí)例的重試次數(shù),默認(rèn)0
MaxAutoRetriesNextServer: 1 #對(duì)切換實(shí)例的重試次數(shù),默認(rèn)1
# hystrix 配置
hystrix:
command:
default: #default全局有效,service id指定應(yīng)用有效
execution:
timeout:
#是否開(kāi)啟超時(shí)熔斷
enabled: true
isolation:
thread:
timeoutInMilliseconds: 10000 #斷路器超時(shí)時(shí)間,默認(rèn)1000ms
# hystrix 隔離模式改為信號(hào)量模式,feign 才能獲取到父線程中的請(qǐng)求頭
strategy: SEMAPHORE
# 允許的并發(fā)量,默認(rèn)值為 10
semaphore:
maxConcurrentRequests: 100
總結(jié)
到此這篇關(guān)于解決Spring Cloud Feign 請(qǐng)求時(shí)附帶請(qǐng)求頭的問(wèn)題的文章就介紹到這了,更多相關(guān)Spring Cloud Feign 請(qǐng)求頭內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring基于AspectJ的AOP開(kāi)發(fā)案例解析
這篇文章主要介紹了Spring的基于AspectJ的AOP開(kāi)發(fā),AspectJ是一個(gè)基于Java語(yǔ)言的AOP框架,使用AspectJ需要導(dǎo)入Spring?AOP和AspectJ相關(guān)jar包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
JAVA中Context的詳細(xì)介紹和實(shí)例分析
這篇文章主要介紹了JAVA中Context的詳細(xì)介紹和實(shí)例分析,Context是維持android各組件能夠正常工作的一個(gè)核心功能類。如果感興趣來(lái)學(xué)習(xí)一下2020-07-07
Java正則表達(dá)式學(xué)習(xí)之分組與替換
這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式學(xué)習(xí)之分組與替換的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Spring核心容器之ApplicationContext上下文啟動(dòng)準(zhǔn)備詳解
這篇文章主要介紹了Spring核心容器之ApplicationContext上下文啟動(dòng)準(zhǔn)備詳解,ApplicationContext 繼承自 BeanFactory ,其不僅包含 BeanFactory 所有功能,還擴(kuò)展了容器功能,需要的朋友可以參考下2023-11-11
java實(shí)現(xiàn)數(shù)據(jù)庫(kù)的數(shù)據(jù)寫入到txt的方法
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)數(shù)據(jù)庫(kù)的數(shù)據(jù)寫入到txt的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
解析Mybatis連續(xù)傳遞多個(gè)參數(shù)的方法
MyBatis是一個(gè)支持普通SQL查詢,存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架,這篇文章主要介紹了Mybatis連續(xù)傳遞多個(gè)參數(shù)的方法,需要的朋友可以參考下2016-08-08
Java設(shè)計(jì)模式之觀察者模式observer?pattern詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之觀察者模式observer?pattern詳解,當(dāng)一個(gè)對(duì)象發(fā)生數(shù)據(jù)變化時(shí),通知其他相關(guān)的一系列對(duì)象,接受到通知的對(duì)象根據(jù)該對(duì)象的變化進(jìn)行相應(yīng)處理以響應(yīng)變化的過(guò)程,需要的朋友可以參考下2023-12-12

