feign 請求呼叫執行緒之間的資訊丟失的問題

2021-09-29 16:04:11 字數 493 閱讀 9526

最近在工作中遇到了乙個這樣的問題,情景如下:

在微服務兩個例項直接呼叫的時候會列印出一些日誌但是發現這些日誌的log_id變了,正常來說應該是保持一致的,例項a呼叫b的時候發現log_id是一致的,但是例項b呼叫a就不一致了,後來除錯了一下發現問題出在斷路器-hystrix 的隔離策略上,原來a的隔離策略是訊號量隔離(semaphore),b的隔離策略是執行緒池隔離(thread),並且預設的是執行緒池隔離,而執行緒池隔離的原理就是feign 請求會由hystrix的執行緒池來進行請求也就是說攜帶著log_id的執行緒和真正呼叫feign的執行緒並不是乙個執行緒!所以不管是寫在header裡面的log_id還是執行緒本身攜帶的threadlocal都會丟失,要解決這個問題有兩個方案:

1.修改 hystrix 策略為訊號量隔離

2.擴充套件hystrix執行緒池隔離支援執行緒之間資訊傳遞 extends hystrixconcurrencystrategy

我選擇的是修改策略為訊號量隔離,果然修改過後就可以攜帶log_id了。

執行緒之間和程序之間的同步

今天學習的內容為 利用互斥事件來控制線程之間 程序之間的同步問題。其實,程序之間的同步也就類似於執行緒之間的同步。互斥事件的作用就是為了保證任乙個時間內,只有乙個執行緒對對公共資源進行操作。下面來看一下執行緒之間的同步,如果是在乙個程序內的執行緒同步問題的話。這樣的例子很多,我就舉乙個最簡單的,執行...

程序之間 執行緒之間的通訊方式

1 程序間的8中通訊方式 1 無名管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 2 高階管道 popen 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子程序,這種方式我們成為高階管道方...

執行緒之間的通訊

class resclass inthread extends thread override public void run else count count 1 2 class outthread extends thread override public void run 資料發生錯亂,造成...