springboot~openfeign開啟熔斷之後MDC為null的理解

来源:https://www.cnblogs.com/lori/archive/2023/01/29/17073249.html
-Advertisement-
Play Games

openfeign開啟熔斷之後MDC為null,這是有前提的,首先,你的熔斷開啟後,使用的是線程池的熔斷模式,即hystrix.command.default.execution.isolation.strategy=THREAD,或者不寫這行,如果值是SEMAPHORE模式,是可以獲取到MDC對象 ...


openfeign開啟熔斷之後MDC為null,這是有前提的,首先,你的熔斷開啟後,使用的是線程池的熔斷模式,即hystrix.command.default.execution.isolation.strategy=THREAD,或者不寫這行,如果值是SEMAPHORE模式,是可以獲取到MDC對象的,因為這種信號量模式,並沒有產生新的線程,所以對於ThreadLocal類型的MDC對象,是可以獲取到的。

openFeign的熔斷配置

ribbon:
  #ribbon請求連接的超時時間- 限制3秒內必須請求到服務,並不限制服務處理的返回時間
  connectTimeout: 1000
  #請求處理的超時時間 下級服務響應最大時間,超出時間消費方(路由也是消費方)返回timeout,超時時間不可大於斷路器的超時時間
  readTimeout: 2000
hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: true
        isolation:
          strategy: THREAD #信號量模式,無超時時間;THREAD線程池模塊,這是預設的
          thread:
            timeoutInMilliseconds: 3000 #對THREAD模式才有效
feign:
  hystrix:
    # Feign啟用斷路器,預設為FALSE,如果開啟熔斷,如果是線程池模式,會在新線池中發起請求,這時MDC無論獲取到,如果是SEMAPHORE模式,是可以獲取到MDC的
    enabled: true

在openFeign的攔截器中,獲取MDC中的traceId

註意,咱們的這個攔截器獲取traceId功能,只是在SEMAPHORE模式才有效【註意,這種模式的熔斷是沒有超時時間的,所以性能不太好,高併發時,請求慢的慢,容易堆積,造成伺服器的雪崩】

@Configuration
public class FeignTraceIdInterceptor implements RequestInterceptor {

	@Override
	public void apply(RequestTemplate template) {
		String traceId = MDC.get(TRACE_ID);
		if (traceId != null) {
			template.header(HTTP_HEADER_TRACE, traceId);
		}
	}
}

在後面的調研中,我們還會針對THREAD模塊進行探究,找到獲取MDC中traceId的方法,請期待。

作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980

支付寶掃一掃,為大叔打賞!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前端面試題學習-HTML-個人總結 這是看別人總結的基礎上再度總結的,總結的鏈接如下 鏈接 1. DOCTYPE 的作用? 告知瀏覽器解析器用何標準解析文檔,若不指定則按相容模式進行解析(向後相容模擬老瀏覽器)。 IE5.5 引入的概念。 HTML5 之後無需指定,因為在之前的都是基於 SGML 的 ...
  • 實現Spring底層機制-03 7.實現任務階段5 7.1分析 階段5目標:bean後置處理器的實現 7.2代碼實現 新增: 1.創建 InitializingBean 介面,實現該介面的 Bean 需要實現 Bean 的初始化方法 bean後置處理器的兩個方法,調用時機分別在 Bean 初始化方法 ...
  • 一、QPython安裝配置 1.1. QPython介紹 QPython是一個可以在安卓設備運行python的腳本引擎。版本有QPython 3L和QPython 3C,3L為官方版本,可以在應用市場搜索下載。3C版本為"乘著船"大佬的修改版本。由於3L版本有許多許可權限制及很多包不能安裝,文章中使用 ...
  • 提示 個人博客首頁 免責聲明:僅供學習交流使用!開源框架可能存在的風險和相關後果將完全由用戶自行承擔,本人不承擔任何法律責任。 1. byob web 介紹 1.1 平臺主要組件 1.1.1 fask 1.1.2 SQLAlchemy 1.1.3 threading 1.1.4 socket 1.1 ...
  • 2023-01-29 一、redis事務與樂觀鎖相關命令 1、redis事務 (1)redis事務的含義 redis事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序執行。事務在執行過程中,不會被其他客戶端送來的命令請求所打斷。 (2)redis事務的作用 redis事務的主要作用就是串聯 ...
  • 簡介 GraalVM是高性能的JDK,支持Java/Python/JavaScript等語言。它可以讓Java變成二進位文件來執行,讓程式在任何地方運行更快。這或許是Java與Go的一場戰爭? 下載安裝GraalVM 安裝GraalVM 首先到官網下載,我是直接到GitHub Release Pag ...
  • @(Matlab導入多個.mat文件並畫圖的過程詳解) 0. 實驗背景 需要導入多個.mat文件,將多組數據畫在一個圖中,並設置圖例、坐標軸、散點圖、折線圖、子圖等。 由於存在重覆操作,主要使用腳本文件編寫代碼。 figure視窗操作比較簡單,腳本文件不好寫的部分可用figure視窗操作進行輔助。 ...
  • 什麼是時區? 1884年在華盛頓召開的一次國際經度會議(又稱國際子午線會議)上,規定將全球劃分為24個時區(東、西各12個時區)。規定英國(格林尼治天文臺舊址)為中時區(零時區)、東1-12區,西1-12區。每個時區橫跨經度15度,時間正好是1小時。 時區的分類? 理論時區 上述時區定義其實是理論時 ...
一周排行
    -Advertisement-
    Play Games
  • 下麵是一個標準的IDistributedCache用例: public class SomeService(IDistributedCache cache) { public async Task<SomeInformation> GetSomeInformationAsync (string na ...
  • 這個庫提供了在啟動期間實例化已註冊的單例,而不是在首次使用它時實例化。 單例通常在首次使用時創建,這可能會導致響應傳入請求的延遲高於平時。在註冊時創建實例有助於防止第一次Request請求的SLA 以往我們要在註冊的時候實例單例可能會這樣寫: //註冊: services.AddSingleton< ...
  • 最近公司的很多項目都要改單點登錄了,不過大部分都還沒敲定,目前立刻要做的就只有一個比較老的項目 先改一個試試手,主要目標就是最短最快實現功能 首先因為要保留原登錄方式,所以頁面上的改動就是在原來登錄頁面下加一個SSO登錄入口 用超鏈接寫的入口,頁面改造後如下圖: 其中超鏈接的 href="Staff ...
  • Like運算符很好用,特別是它所提供的其中*、?這兩種通配符,在Windows文件系統和各類項目中運用非常廣泛。 但Like運算符僅在VB中支持,在C#中,如何實現呢? 以下是關於LikeString的四種實現方式,其中第四種為Regex正則表達式實現,且在.NET Standard 2.0及以上平... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他們的程式記憶體會偶發性暴漲,自己分析了下是非托管記憶體問題,讓我幫忙看下怎麼回事?哈哈,看到這個dump我還是非常有興趣的,居然還有這種游戲幣自助機類型的程式,下次去大玩家看看他們出幣的機器後端是不是C#寫的?由於dump是linux上的程式,剛好win ...
  • 前言 大家好,我是老馬。很高興遇到你。 我們為 java 開發者實現了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何處理的,可以參考我的另一個項目: 手寫從零實現簡易版 tomcat minicat 手寫 ngin ...
  • 上一次的介紹,主要圍繞如何統一去捕獲異常,以及為每一種異常添加自己的Mapper實現,並且我們知道,當在ExceptionMapper中返回非200的Response,不支持application/json的響應類型,而是寫死的text/plain類型。 Filter為二方包異常手動捕獲 參考:ht ...
  • 大家好,我是R哥。 今天分享一個爽飛了的面試輔導 case: 這個杭州兄弟空窗期 1 個月+,面試了 6 家公司 0 Offer,不知道問題出在哪,難道是杭州的 IT 崩盤了麽? 報名面試輔導後,經過一個多月的輔導打磨,現在成功入職某上市公司,漲薪 30%+,955 工作制,不咋加班,還不捲。 其他 ...
  • 引入依賴 <!--Freemarker wls--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> ...
  • 你應如何運行程式 互動式命令模式 開始一個互動式會話 一般是在操作系統命令行下輸入python,且不帶任何參數 系統路徑 如果沒有設置系統的PATH環境變數來包括Python的安裝路徑,可能需要機器上Python可執行文件的完整路徑來代替python 運行的位置:代碼位置 不要輸入的內容:提示符和註 ...