建立局域网网站,熊猫seo实战培训,京东电子商务网站建设目的,建设银行 网站Stepping 是一个基于 BASE 的分布式作业实现。它可以作为工作流引擎#xff0c;事件收/发件箱#xff0c;用于邮箱/短信发送#xff0c;用于远程接口调用等场景。Stepping 中 Job 和 Step 是什么?Job 是一个分布式事务单元#xff0c;而 Step 是 job 中一个特定的任务。一…Stepping 是一个基于 BASE 的分布式作业实现。它可以作为工作流引擎事件收/发件箱用于邮箱/短信发送用于远程接口调用等场景。Stepping 中 Job 和 Step 是什么?Job 是一个分布式事务单元而 Step 是 job 中一个特定的任务。一个 job作业包含了一个或多个 step步骤事务管理器会按顺序执行步骤。如果步骤 1 失败了它将重试直到成功然后开始执行步骤 2。什么场景需要 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.AddStepRequestBank2TransferInStep(); // 不带参数的步骤await job.StartAsync();Steps 文档 介绍了如何定义一个步骤。如果你希望在 DB 事务提交后开始执行一些步骤并且确保它们最终能够执行成功var db serviceProvider.GetRequiredServiceMyDbContext(); // 以 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 ServerDTM 是一个成熟的事务管理器并且能够为 Stepping 提供能力。选择 DTM 你将可以使用更多的分布式事务模式例如 Saga、TCC和XA。请参阅 DTM 文档https://github.com/TeamStepping/Stepping.NET/blob/main/docs/Dtm.md。Local-TMStepping 提供了一种简单的内置事务管理器实现。Local-TM 与你的应用一起运行。在这种模式下每个应用都作为自己发布的 jobs 的事务管理器。请参阅 Local-TM 文档https://github.com/TeamStepping/Stepping.NET/blob/main/docs/LocalTm.md。