使用Stepping.NET輕松執行多步原子操作

Stepping 是一個基于 BASE 的分布式作業實現。它可以作為工作流引擎,事件收/發件箱,用于郵箱/短信發送,用于遠程接口調用等場景。

Stepping 中?Job?和?Step?是什么?

Job?是一個分布式事務單元,而?Step?是 job 中一個特定的任務。

一個 job(作業)包含了一個或多個 step(步驟),事務管理器會按順序執行步驟。如果步驟 1 失敗了,它將重試直到成功,然后開始執行步驟 2。

什么場景需要 Stepping

5438cad8d53041f3c7859f1104c6c258.png

需要執行多個步驟且確保原子性

當一個 job 開始執行,Stepping 最終會完成你布置的所有 steps。如果你的應用在執行這些步驟期間掛了,事務管理器會在應用恢復后,繼續執行剩下的步驟。

Stepping 會按順序挨個完成你布置的 steps。如果一個步驟失敗,它會被推遲重試,這確保了 job 的?原子性。請確保你所有的 step 都能在重試后最終成功,除非它是一個 Saga step。

當你的應用在執行步驟期間掛了,Stepping 有可能已經實際完成了這個步驟,而未自知,當你的應用恢復,Stepping 會冗余地執行這個步驟。因此,你所有的步驟都應該做到?冪等。

需要確保在 DB 事務提交后,后續步驟一定執行

當一個綁定了 DB 事務的 job 開始執行,在 DB 事務提交后,Stepping 最終會完成你布置的所有 steps。

你無需擔心在 DB 事務提交后、后續步驟執行之前,這期間應用掛了導致的非原子性問題。我們已經使用 DTM 的?二階段消息:https://en.dtm.pub/practice/msg.html ?模式處理了這種情況。

Stepping 也支持“多租戶且多數據庫”的場景,這意味著無論你的應用有多少個不同的數據庫,都不成問題。

用例

事務管理器會最終完成添加的步驟:

var job = await distributedJobFactory.CreateJobAsync();job.AddStep(new RequestBank1TransferOutStep(args)); // 帶參數的步驟
job.AddStep<RequestBank2TransferInStep>(); // 不帶參數的步驟await job.StartAsync();

Steps 文檔?介紹了如何定義一個步驟。

如果你希望在 DB 事務提交后開始執行一些步驟,并且確保它們最終能夠執行成功:

var db = serviceProvider.GetRequiredService<MyDbContext>(); // 以 EF Core 舉例
await db.Database.BeginTransactionAsync();var order = new Order(args);db.Orders.Add(order);
await db.SaveChangesAsync();var job = await distributedJobFactory.CreateJobAsync(new EfCoreSteppingDbContext(db));job.AddStep(new SendOrderCreatedEmailStep(order));
job.AddStep(new SendOrderCreatedSmsStep(order));await job.StartAsync(); // 這個方法也會提交 DB 事務

Stepping 支持?EF CoreADO.NET(即將到來),及?MongoDB

了解更多信息,請參閱?用法文檔:https://github.com/TeamStepping/Stepping.NET/blob/main/docs/Usage.md。

安裝

請參閱?安裝文檔:https://github.com/TeamStepping/Stepping.NET/blob/main/docs/Installation.md。

支持的事務管理器

Stepping 要求使用事務管理器。你可以選擇一種你喜歡的事務管理器。

DTM Server

DTM 是一個成熟的事務管理器,并且能夠為 Stepping 提供能力。選擇 DTM 你將可以使用更多的分布式事務模式,例如 Saga、TCC和XA。

請參閱 DTM 文檔:https://github.com/TeamStepping/Stepping.NET/blob/main/docs/Dtm.md。

Local-TM

Stepping 提供了一種簡單的內置事務管理器實現。Local-TM 與你的應用一起運行。在這種模式下,每個應用都作為自己發布的 jobs 的事務管理器。

請參閱 Local-TM 文檔:https://github.com/TeamStepping/Stepping.NET/blob/main/docs/LocalTm.md。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282647.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282647.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282647.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JSP+JavaBean+Servlet技術(MVC模型)

一&#xff0c;Servlet開發用戶在瀏覽器中輸入一個網址并回車&#xff0c;瀏覽器會向服務器發送一個HTTP請求。服務器端程序接受這個請求&#xff0c;并對請求進行處理&#xff0c;然后發送一個回應。瀏覽器收到回應&#xff0c;再把回應的內容顯示出來。這種請求—響應模式就是…

ora-01591:鎖被未分布式事物處理/Distrib tran

伴隨報錯內容&#xff1a;Distrib tran xxx.xxx.xx.x.xxxx 1、使用Oracle DBA用戶&#xff0c;查詢如下數據字典&#xff1a;select * from dba_2pc_pending2、強制Rollback或者Commit該事務&#xff1a;select commit force || local_tran_id||; from dba_2pc_pending…

bzoj2721 [Violet 5]櫻花

分析&#xff1a;這道題對于我這種蒟蒻來說還是很有難度啊。 思路非常巧妙&#xff0c;既然不定方程要有有限個數解&#xff0c;那么這個肯定會對解有所限制&#xff0c;也就是本題中的正整數.這個時候我們要表示出方程中的一個根x,設z n!,那么xyz/(y-z),這樣的話不能得到答案…

ipados 文件 連接服務器,iPadOS更新指南,總有一個功能是你需要的

近期&#xff0c;蘋果向部分ipad用戶推送了iPadOS系統&#xff0c;據系統介紹&#xff0c;這是一款強大的操作系統&#xff0c;更能體現iPad的獨特之處。iPadOS與IOS同源&#xff0c;針對iPad的大顯示屏和多功能增加了全新和直觀的強大功能。剛才小編給大家提到了部分iPad用戶&…

Angular 2.x 從0到1 (五)史上最簡單的Angular2教程

第一節&#xff1a;Angular 2.0 從0到1 &#xff08;一&#xff09;第二節&#xff1a;Angular 2.0 從0到1 &#xff08;二&#xff09;第三節&#xff1a;Angular 2.0 從0到1 &#xff08;三&#xff09;第四節&#xff1a;Angular 2.0 從0到1 &#xff08;四&#xff09;第五…

《大道至簡》讀后感

所謂的大道至簡就是說大道理&#xff08;基本原理&#xff0c;方法和規律&#xff09;是極其簡單的&#xff0c;簡單到一兩句話就能說明白。所謂“真傳一句話&#xff0c;假傳萬卷書”。這也許也是這本書只有一百多頁的原因吧。 說實話&#xff0c;《大道至簡》這部作品對現在有…

ajax 分頁 評論刷新,評論:js無刷新分頁(原創)

繁華落盡02020/4/28 0:26:00大佬&#xff0c;教一下怎么用&#xff0c;以前我是直接在按鈕上綁個路徑。首頁上一頁${i}${i}下一頁尾頁漫走32020/4/28 20:43:32后臺的方法需要的參數&#xff1a;當前頁、每頁顯示條數&#xff0c;插件都給你控制好了&#xff0c;你直接用就行。e…

MariaDB基礎(二)

MariaDB基礎(二)介紹關于MariaDB的如下知識點&#xff1a;1. 查詢緩存2. 索引3. EXPLAIN1.查詢緩存&#xff1a;1&#xff09;什么是緩存&#xff1f;緩存就是數據交換的緩沖區&#xff0c;即Cache&#xff0c;存放在內存中&#xff1b;2&#xff09;查詢緩存的數據以何種形式存…

設計模式——享元模式具體解釋

0. 前言寫在最前面&#xff0c;本人的設計模式類博文&#xff0c;建議先看博文前半部分的理論介紹。再看后半部分的實例分析。最后再返回來復習一遍理論介紹&#xff0c;這時候你就會發現我在重點處標紅的用心&#xff0c;對于幫助你理解設計模式有奇效哦~本文原創。轉載請注明…

OpenStack Nova計算服務管理(四)

作者&#xff1a;李曉輝聯系方式: Xiaohui_lifoxmail.com環境介紹類型控制節點和計算節點等在一起&#xff0c;形成all-in-one內存8G硬盤200G網卡2塊計算服務概覽使用OpenStack計算服務來托管和管理云計算系統。OpenStack計算服務是基礎設施即服務(IaaS)系統的主要部分&#xf…

miui替換官方文件解決無服務器,miui 關掉云服務器

miui 關掉云服務器 內容精選換一換本節操作介紹Linux云服務器切換密鑰登錄為密碼登錄的操作步驟。使用密鑰登錄Linux云服務器&#xff0c;設置root密碼。sudo passwd root若密鑰文件丟失或損壞&#xff0c;請參考Linux云服務器如何進入單用戶模式重置root密碼&#xff0c;重置r…

PHP-高并發和大流量的解決方案

一 高并發的概念 在互聯網時代&#xff0c;并發&#xff0c;高并發通常是指并發訪問。也就是在某個時間點&#xff0c;有多少個訪問同時到來。 二 高并發架構相關概念 1、QPS (每秒查詢率) : 每秒鐘請求或者查詢的數量&#xff0c;在互聯網領域&#xff0c;指每秒響應請求數…

原型

2019獨角獸企業重金招聘Python工程師標準>>> 什么是原型&#xff1a; 對象與對象之間的關系 轉載于:https://my.oschina.net/u/2285087/blog/854377

JavaScript中數組slice和splice的對比小結

前言 今天重溫了一下Javascript&#xff0c;看到了數組的方法&#xff0c;其中有兩個比較相似的方法——splice和splice&#xff0c;看著很像&#xff0c;就是多了一個p&#xff0c;但是用法卻相當不一樣。 在使用中&#xff0c;可以通過選擇一個具有強語義表達性的 API 來減少…

存儲服務器的操作系統,存儲服務器是什么操作系統

存儲服務器是什么操作系統 內容精選換一換鏡像服務提供了私有鏡像的全生命周期管理能力&#xff0c;主要包括創建私有鏡像&#xff0c;復制、共享或導出私有鏡像等操作&#xff0c;您可以根據實際場景選擇合適的方法&#xff0c;并結合彈性云服務器、對象存儲等周邊服務完成業務…

優化--減少HTTP請求

一、 圖片地圖 (將幾張圖片合為一張,根據用戶點擊的位置發送不同請求,減少了圖片的請求數量) 案例所在位置:http://stevesouders.com/hpws/imagemap.php 二、css精靈(和圖片地圖功能相似,都是將幾張圖片合并在一起,根據位置發送不同請求) 這里不做具體使用介紹,百度有此方面內…

軟件負載均衡

一、軟件負載均衡概述 硬件負載均衡性能優越&#xff0c;功能全面&#xff0c;但是價格昂貴&#xff0c;一般適合初期或者土豪級公司長期使用。因此軟件負載均衡在互聯網領域大量使用。常用的軟件負載均衡軟件有Nginx&#xff0c;Lvs&#xff0c;HaProxy等。本文參考大量文檔&a…

JAVA多線程之先行發生原則

一、引子   如果java內存模型中所有的有序性都僅僅依靠volatile和synchronized來完成&#xff0c;那么有一些操作會變得很繁瑣&#xff0c;但我們在編寫java并發代碼時并未感覺到這一點&#xff0c;這是因為java語言中有個先行發生原則&#xff08;happens-before&#xff09…

git工具 將源碼clone到本地指定目錄的三種方式

git工具 將源碼clone到本地指定目錄的三種方式 CreationTime--2018年7月27日15點34分 Author:Marydon 1.情景展示 運行git-bash.exe&#xff0c;輸入命令&#xff1a;git clone 下載源碼地址-->回車&#xff0c;結果發現項目被下載到了&#xff0c;git工具的安裝目錄下 如何…

[摘]全文檢索引擎Solr系列—–全文檢索基本原理

原文鏈接--http://www.importnew.com/12707.html 全文檢索引擎Solr系列—–全文檢索基本原理 2014/08/18 | 分類&#xff1a; 基礎技術, 教程 | 2 條評論 | 標簽&#xff1a; solr 分享到&#xff1a; 64 本文作者&#xff1a; ImportNew - 劉志軍 未經許可&#xff0c;禁止轉載…