gpt4 book ai didi

c# - NServiceBus 批处理长时间运行的作业

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:33 25 4
gpt4 key购买 nike

我正在从事一个使用 NSB 的项目,我真的很喜欢它,但这是我的第一个 NSB 解决方案,所以有点菜鸟。我们有一项工作需要每天运行以处理成员 - 由于工作简单,预计不会花费很长时间,但可能会影响数以千计的成员,并且在未来可能会影响数万或数十万。

让这一切都在一个单一的处理程序中一次性发生感觉是错误的,但是让一个处理程序发现受影响的成员然后为每个成员触发单独的事件听起来有点相反。我可以想到其他一些方法,但想知道在 NSB 中是否有处理此问题的惯用方法?

编辑以澄清:我正在使用 Schedule 在凌晨 3 点发送命令,该命令的处理程序将查询 SQL 数据库以获取需要处理的成员列表。处理将涉及为每个成员更新/插入一或两行。我的问题是关于如何处理 NSB 内可能有大量成员的列表。

编辑第 2 部分:作业现在需要每月运行一次,而不是每天运行一次。

最佳答案

我不会为此使用传奇。 Sagas 应该是轻量级的,并且专为编排而不是执行工作而设计。它们是由消息启动的,而不是按计划启动的。

您可以使用内置的 scheduler 来达到您的目的.我没用过,但看起来很简单。

你可以这样做:

  1. 配置每天 0300 发送的命令消息(例如 StartJob)。
  2. 然后,StartJob 处理程序将查询数据库以获取工作。

然后,根据您的要求:

  • 如果您需要一次完成所有工作,请创建一个包含所有工作的命令,然后将其发送到另一个端点进行处理。如果您使用事务性 MSMQ,那么这将作为一个整体成功或失败。
  • 如果您不关心是否只有部分工作成功,则为每个工作单元创建一个命令,然后分派(dispatch)到端点进行处理。这样做的好处是您可以使用 distributor 进行横向扩展。如果你需要的话。

I'm working on a project that is using NSB...We have a job that needs to run every day...

虽然您可以使用 NSB 来完成此类工作,但我真的不会这样做。您可以使用许多其他方法。 SQL 作业或 cron 作业将是显而易见的(而且开发起来要快得多,性能更高,也更简单)。

尽管它确实支持此类用例,但 NServiceBus 并不是真正为计划的批处理而设计的。我会严重质疑你是否应该使用 NSB 来完成这项任务。

关于c# - NServiceBus 批处理长时间运行的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42576215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com