解決Feign異步調(diào)用丟失上下文問題
問題描述
在微服務中使用Feign 調(diào)用,為了使Feign 調(diào)用都是登錄狀態(tài),會把登錄狀態(tài)的Cookie信息都攜帶上,使用的 攔截器往請求里面存儲 cookie 信息 使用RequestContextHolder
使用Feign 遠程調(diào)用 使用異步的模式 (本人是 order 服務異步調(diào)用 會員服務,購物車服務),
在 order服務 本人使用攔截器往往請求里面加入了Cookie信息。
在 會員服務,和購物車服務會 空異常,原因是 order 攔截器無法 獲取上下文信息 ,上下文為null;
異步編排代碼如下:
報錯原因
RequestContextHolder 里面 ThreadLocal 存取信息
因為攔截器 利用ThreadLocal
來獲取上下文信息,如果是異步的話,肯定就無法獲取信息了,
解決方案
在使用異步調(diào)用的時候,把RequestContextHolder 數(shù)據(jù)同步到 開啟的線程的RequestContextHolder 里面
代碼如下:
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
logback如何去掉DubboMonitor煩人的INFO日志
這篇文章主要介紹了logback如何去掉DubboMonitor煩人的INFO日志方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Spring?boot?整合?Redisson實現(xiàn)分布式鎖并驗證功能
這篇文章主要介紹了Spring?boot?整合?Redisson實現(xiàn)分布式鎖并驗證,redisson是官方推薦的分布式鎖實現(xiàn)方案,采用redis自身的原子命令和lua腳本來實現(xiàn),需要的朋友可以參考下2022-05-05ThreadPoolExecutor線程池原理及其execute方法(詳解)
下面小編就為大家?guī)硪黄猅hreadPoolExecutor線程池原理及其execute方法(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06Spring Boot 集成Shiro的多realm配置過程
這篇文章主要介紹了Spring Boot 集成Shiro的多realm配置,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10