欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決Feign配置RequestContextHolder.getRequestAttributes()為null的問題

 更新時間:2024年01月18日 09:33:23   作者:07feng  
這篇文章主要介紹了解決Feign配置RequestContextHolder.getRequestAttributes()為null的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

場景

feign配置如下

異步代碼中調(diào)用feign

當用在異步代碼中用feign調(diào)用微服務(wù)時,后臺日志中出現(xiàn)報錯信息NullPoinntException

分析原因

關(guān)于RequestContextHolder

實現(xiàn)原理 ThreadLocal

ThreadLocal是一個本地線程副本變量工具類。主要用于將私有線程和該線程存放的副本對象做一個映射,各個線程之間的變量互不干擾,在高并發(fā)場景下,可以實現(xiàn)無狀態(tài)的調(diào)用,特別適用于各個線程依賴不同的變量值完成操作的場景。

在每個線程的內(nèi)部存在一個數(shù)據(jù)結(jié)構(gòu)為Map的ThreadLocals變量,以<ThreadLocal,Value>的形式保存著線程變量和其對應(yīng)的值。

對于不同的線程,每次獲取副本值時,別的線程并不能獲取到當前線程的副本值,形成了副本的隔離,互不干擾。

原因

RequestContextHolder將當前線程中的request信息存儲在ThreadLocal中,開啟另外一個線程異步調(diào)用feign,httpRequest是綁定在ThreadLocal中的,只能在當前線程中共享,子線程是不能獲取到父線程的屬性。

解決方案

1、取消異步調(diào)用,改為同步調(diào)用

2、沿用異步調(diào)用,但是在調(diào)用前,把父線程request信息綁定給子線程,在方法執(zhí)行的前面,加入以下語句

下面展示一些 內(nèi)聯(lián)代碼片

RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(), true);

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

最新評論