DTM釋出了最新版本1.8.4,主要更新如下:
- 零配置啟動,對新人上手更加友好,不依賴docker、不依賴資料庫,零依賴,零配置直接啟動
- 支援homebrew一鍵安裝
- 支援自定義子事務請求header
- 支援HTTP/gRPC攔截器
- 支援自定義服務端和SDK中使用的資料庫表名
零配置啟動
最新版本1.8.4,可以在這個頁面下載相應平臺(支援linux,Mac,windows)的安裝包
https://github.com/dtm-labs/dtm/releases/tag/v1.8.4
解壓後直接執行即可啟動。預設情況下,dtm使用內嵌的boltdb儲存引擎(etcd也使用該儲存引擎),他會在當前目錄下建立dtm.bolt檔案,該檔案儲存了全域性事務進度。
新方式下,使用者不再需要docker、不需要事先安裝資料庫,大大降低新人的上手難度,能夠快速開啟分散式事務體驗之旅。
boltdb儲存引擎下,清理過期資料功能,由社群的楊松林,https://github.com/lsytj0413 貢獻,特別感謝
homebrew 一鍵安裝
為了最大程度的方便開發人員使用dtm,我們還將dtm釋出到了homebrew,您如果在mac上工作,只需要如下一行簡單命令,即可安裝dtm
brew install dtm
這會安裝兩個命令:dtm dtm-qs,通過如下命令執行dtm伺服器:
dtm
然後執行下面命令,即可發起一個最簡單的分散式事務示例,裡面是模擬的是一個跨行轉賬分散式事務例子
dtm-qs
可以從dtm-qs的日誌中看到TransOut,TransIn的日誌,表明這個事務已成功完成
支援自定義子事務請求header
通過設定全域性事務物件中的BranchHeaders,可以讓dtm伺服器將這些header傳遞給每個子事務,該特性可以解決子事務API需要許可權驗證的問題,使用示例如下:
gidYes := dtmimp.GetFuncName()
sagaYes := dtmcli.NewSaga(dtmutil.DefaultHttpServer, gidYes)
sagaYes.BranchHeaders = map[string]string{
"test_header": "test",
}
sagaYes.WaitResult = true
sagaYes.Add(busi.Busi+"/TransOutHeaderYes", "", nil)
err := sagaYes.Submit()
在dtm-labs/dtm-examples下,還有更多的例子,包括HTTP和gRPC協議的例子
支援HTTP/gRPC攔截器
dtm的SDK新增了HTTP/gRPC攔截器的支援,如果你需要對相關請求深入的定製,可以通過以下三個攔截器介面,進行定製
func OnBeforeRequest(middleware func(c *resty.Client, r *resty.Request) error)
func OnAfterResponse(middleware func(c *resty.Client, resp *resty.Response) error)
func AddUnaryInterceptor(interceptor grpc.UnaryClientInterceptor)
支援自定義服務端和SDK中使用的資料庫表名
SDK中新增如下函式,允許自定義子事務屏障的表名:
SetBarrierTableName
伺服器端支援自定義全域性事務表和分支事務操作表的表名,配置名稱為:
Store.TransGlobalTable
Store.TransBranchOpTable
專案地址
關於分散式事務更多的理論知識與實踐,可以訪問以下專案和公眾號:
https://github.com/dtm-labs/dtm ,歡迎訪問,並star支援我們。
關注【分散式事務】公眾號,獲取更多分散式事務相關知識,同時可以加入我們的社群