解決Spring Cloud Feign 請求時附帶請求頭的問題
問題描述
Feign 在請求時是不會將 request 的請求頭帶著請求的,導(dǎo)致假如 Feign 調(diào)用的接口需要請求頭的信息,比如當(dāng)前用戶的 token 之類的就獲取不到
解決方案 FeignConfiguration
通過實現(xiàn) Feign 的 RequestInterceptor 將從上下文中獲取到的請求頭信息循環(huán)設(shè)置到 Feign 請求頭中。
/**
* feign 配置文件
* 將請求頭中的參數(shù),全部作為 feign 請求頭參數(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 請求走哪種配置
@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 配置為信號量模式,否則會出現(xiàn)由于隔離策略導(dǎo)致獲取不到請求頭
# ribbon 配置
ribbon:
OkToRetryOnAllOperations: false #對所有操作請求都進(jìn)行重試,默認(rèn)false
ReadTimeout: 5000 #負(fù)載均衡超時時間,默認(rèn)值5000
ConnectTimeout: 5000 #ribbon請求連接的超時時間,默認(rèn)值2000
MaxAutoRetries: 0 #對當(dāng)前實例的重試次數(shù),默認(rèn)0
MaxAutoRetriesNextServer: 1 #對切換實例的重試次數(shù),默認(rèn)1
# hystrix 配置
hystrix:
command:
default: #default全局有效,service id指定應(yīng)用有效
execution:
timeout:
#是否開啟超時熔斷
enabled: true
isolation:
thread:
timeoutInMilliseconds: 10000 #斷路器超時時間,默認(rèn)1000ms
# hystrix 隔離模式改為信號量模式,feign 才能獲取到父線程中的請求頭
strategy: SEMAPHORE
# 允許的并發(fā)量,默認(rèn)值為 10
semaphore:
maxConcurrentRequests: 100
總結(jié)
到此這篇關(guān)于解決Spring Cloud Feign 請求時附帶請求頭的問題的文章就介紹到這了,更多相關(guān)Spring Cloud Feign 請求頭內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java微服務(wù)之Feign遠(yuǎn)程調(diào)用方式
這篇文章主要介紹了Java微服務(wù)之Feign遠(yuǎn)程調(diào)用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
Java深入了解數(shù)據(jù)結(jié)構(gòu)之優(yōu)先級隊列(堆)
普通的隊列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),元素在隊列尾追加,而從隊列頭刪除。在優(yōu)先隊列中,元素被賦予優(yōu)先級。當(dāng)訪問元素時,具有最高優(yōu)先級的元素最先刪除。優(yōu)先隊列具有最高級先出 (first in, largest out)的行為特征。通常采用堆數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)2022-01-01
springBoot?之spring.factories擴展機制示例解析
這篇文章主要為大家介紹了springBoot?之spring.factories擴展機制示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
JavaWeb 中Cookie實現(xiàn)記住密碼的功能示例
cookie是一種WEB服務(wù)器通過瀏覽器在訪問者的硬盤上存儲信息的手段。Cookie的目的就是為用戶帶來方便,為網(wǎng)站帶來增值。這篇文章主要介紹了JavaWeb 中Cookie實現(xiàn)記住密碼的功能示例,需要的朋友可以參考下2017-06-06

