查看: 85|回复: 0

使用Stepping.NET轻松执行多步原子操作

[复制链接]

4

主题

9

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2022-9-20 17:26:44 | 显示全部楼层 |阅读模式
Stepping 是一个基于 BASE 的分布式作业实现。它可以作为工作流引擎,事件收/发件箱,用于邮箱/短信发送,用于远程接口调用等场景。
Stepping 中 Job 和 Step 是什么?

Job 是一个分布式事务单元,而 Step 是 job 中一个特定的任务。
一个 job(作业)包含了一个或多个 step(步骤),事务管理器会按顺序执行步骤。如果步骤 1 失败了,它将重试直到成功,然后开始执行步骤 2。
NET6零基础教程

学习.NET6技术,讲解.NET6从入门到实战,解密.ASP.NETCore框架详细揭秘,应用实战实操,.NET6+微服务架构实战,容器技术Docker、WebAPI等揭秘,都是免费的,非常值得学习哟。


本教程16个视频课时,主要以.NET6背景,框架设计,.NET6从入门到精通-代码+脚本+文档展开。从环境准备到ASP.NETCore开发,系统得梳理了各项流程,从零开始了解基于C#语言开发的工具、项目,跟着实操。最终能独立完成基于.NET语言的基本开发。
资料免费自取:

由于内容过多不便呈现,需要视频教程和配套源码的小伙伴,可点击这里,添加我知乎主页个人说明处号码 免费分享
也可直接点击下方卡片:点击后可自动复制威芯号,并跳转到威芯。得辛苦大家自行搜索威芯号添加。内容已做打包,添加后直接发送注意查收!
什么场景需要 Stepping



需要执行多个步骤且确保原子性

当一个 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 Core,ADO.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。
文章来源dotNET跨平台。
学习离不开答疑交流,跳槽高薪离不开信息分享,这里给大家推荐个学习群,里面有大佬技术答疑、有直播技术分享、有资料定期分享、还有高薪内推资源,强烈建议大家进群一起学习交流,来年拿高薪。也欢迎大家加入最活跃的编程技术交流群 (.NET/WPF )进学习群,一起学习进步!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表