日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SOFA 源码分析 — 链路数据透传

發布時間:2025/4/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SOFA 源码分析 — 链路数据透传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

SOFA—RPC 支持數據鏈路透傳功能,官方解釋:

鏈路數據透傳功能支持應用向調用上下文中存放數據,達到整個鏈路上的應用都可以操作該數據。 使用方式如下,可分別向鏈路的 request 和 response 中放入數據進行透傳,并可獲取到鏈路中相應的數據。

使用方式:

RpcInvokeContext.getContext().putRequestBaggage("key_request","value_request"); RpcInvokeContext.getContext().putResponseBaggage("key_response","value_response");RpcInvokeContext.getContext().getAllRequestBaggage("key_request"); RpcInvokeContext.getContext().getAllRequestBaggage("key_response"); 復制代碼

源碼分析

從這個 4 句代碼開始看。

關鍵類: RpcInvokeContext,該類是一個 基于ThreadLocal的面向業務開發者使用的上下文傳遞對象。

內部維護了一個 ThreadLocal 對象。

protected static final ThreadLocal<RpcInvokeContext> LOCAL = new ThreadLocal<RpcInvokeContext>(); 復制代碼

value 是一個 RpcInvokeContext 對象。

當調用 getContext 的時候,就會從當前線程獲取 RpcInvokeContext 對象。

該類定義了以下屬性:

  • boolean BAGGAGE_ENABLE 是否開啟上下文透傳功能,關閉后,會提高性能
  • Integer timeout 用戶自定義超時時間,單次調用生效
  • String targetURL 用戶自定義對方地址,單次調用生效
  • String targetGroup 用戶自定義對方分組
  • SofaResponseCallback responseCallback 用戶自定義Callback,單次調用生效
  • ResponseFuture<?> future
  • ConcurrentMap<String, Object> map 自定義屬性
  • Map<String, String> requestBaggag 請求上的透傳數據
  • Map<String, String> responseBaggage 響應上的透傳數據

知道了基本的數據結構,再看看上面的幾個方法:

  • putRequestBaggage()
  • putResponseBaggage()
  • getAllRequestBaggage()
  • getAllRequestBaggage()

其實都是從 Map 中獲取數據,不過,貌似官方的例子有點問題,后面兩個例子不對。沒有 key 。待我提個 issue。

總結

這個功能讓我想到了我在公司項目中使用的 CurrentUser 功能,也是使用的 ThreadLocal,將用戶的信息存在線程中,這樣就不必將常用數據在方法參數中傳遞了,省了很多事。只不過異步的時候,可能會有點問題,需要手動將 ThreadLocal 傳遞到異步線程中。

不過,我沒有使用手動傳遞,我是這么設計的:自定義線程池和線程工廠,線程工廠創建線程的時候,會將主線程的 ThreadLocal 復制到異步線程中,并自定義了線程類,在 finally 塊中刪除 ThreadLocal,非常完美的一個設計。這樣就不必每次手動傳遞并手動刪除了。

好了,這個功能還是很簡單的。但非常實用,不過要是能加上我上面設計的那個功能就好啦! 哈哈!

總結

以上是生活随笔為你收集整理的SOFA 源码分析 — 链路数据透传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。