解決Spring Cloud Feign 請(qǐng)求時(shí)附帶請(qǐng)求頭的問題
問題描述
Feign 在請(qǐng)求時(shí)是不會(huì)將 request 的請(qǐng)求頭帶著請(qǐng)求的,導(dǎo)致假如 Feign 調(diào)用的接口需要請(qǐng)求頭的信息,比如當(dāng)前用戶的 token 之類的就獲取不到
解決方案 FeignConfiguration
通過實(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); } } } }
使用
通過 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: #是否開啟超時(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)求頭的問題的文章就介紹到這了,更多相關(guān)Spring Cloud Feign 請(qǐng)求頭內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA中Context的詳細(xì)介紹和實(shí)例分析
這篇文章主要介紹了JAVA中Context的詳細(xì)介紹和實(shí)例分析,Context是維持android各組件能夠正常工作的一個(gè)核心功能類。如果感興趣來學(xué)習(xí)一下2020-07-07Java正則表達(dá)式學(xué)習(xí)之分組與替換
這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式學(xué)習(xí)之分組與替換的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Spring核心容器之ApplicationContext上下文啟動(dòng)準(zhǔn)備詳解
這篇文章主要介紹了Spring核心容器之ApplicationContext上下文啟動(dòng)準(zhǔn)備詳解,ApplicationContext 繼承自 BeanFactory ,其不僅包含 BeanFactory 所有功能,還擴(kuò)展了容器功能,需要的朋友可以參考下2023-11-11java實(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ǔ)過程和高級(jí)映射的優(yōu)秀持久層框架,這篇文章主要介紹了Mybatis連續(xù)傳遞多個(gè)參數(shù)的方法,需要的朋友可以參考下2016-08-08Java設(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)變化的過程,需要的朋友可以參考下2023-12-12