NServiceBus:延迟处理所有传入消息

时间:2018-12-04 10:41:36

标签: c# .net nservicebus

我遇到的情况是,控制台应用程序(简称为Builder)和NServiceBus端点(简称为Feeder)都正在写入同一数据存储区。 Feeder处理传入的EntityChanged消息,而Builder进入数据库并获取所有实体的最新信息,并将必要的信息分批写入数据存储中。

从观察Builder的工作原理来看,一个显而易见的问题是,它将掩盖Feeder在运行Builder时对数据存储所做的任何更改。因此,我需要做的是在构建器运行时停止Feeder处理NSB消息,然后在构建器完成时让它简单地恢复处理。

目前,我们之所以这么做是因为我们是临时手动运行Builder的;我们实际上要在运行Builder时停止Feeder服务,然后再重新启动它。现在,我们将按计划运行构建器,我们需要使该过程自动化。

以自动化方式停止Feeder服务并不理想,因为我们的监视和警报工具将变得毫无用处,并且无论如何,这是Windows服务,将自动重启。

NServiceBus中是否有一个功能可以为我们完成此任务?我最初想到的是消息调度或超时,但是它们是由发送端点专门配置的。我需要在接收端点上使消息超时。

1 个答案:

答案 0 :(得分:0)

听起来像是一个相对简单的答案,这将是检查并发问题,因此,当供稿器提交到数据库时,它将需要检查数据行是否仍与首次读取时的状态相同,否则引发并发错误。然后,NServiceBus将能够在该事件发生后重试。看一下此链接,它会更深入地解释,因为听起来您可能需要一个乐观的锁定策略。 http://www.agiledata.org/essays/concurrencyControl.html