NServiceBus延迟消息处理

时间:2009-08-21 11:04:33

标签: c# nservicebus delayed-execution

我有一个NServiceBus应用程序,由于某些外部事件没有发生,可能无法处理给定的消息。因为这个其他事件不是NSB事件,所以我无法正确实施传奇。

然而,我不是仅仅重新排队消息(这会导致循环直到发生外部事件),而是将消息包装在另一条消息(DelayMessage)中并对其进行排队。 DelayMessage由不同的服务获取并放置在数据库中,直到重试间隔到期。此时,延迟服务将消息重新排入原始队列,以便进行另一次尝试。

然而,如果外部事件仍然没有发生,这可能不止一次发生,并且在甚至从未发生的情况下,我想限制消息的往返次数。这意味着DelayMessage具有MaxRetries属性,但是当延迟服务将原始消息排队以进行重试时,该属性会丢失。

我错过了哪些其他选择?我很高兴接受这个问题有一个完全不同的解决方案。

1 个答案:

答案 0 :(得分:4)

考虑实施一个存储第一条消息的saga,直到第二条消息到达为止。您可能还希望saga也打开timeout,以便在第二条消息丢失或其他内容时,您的进程不会无限期地等待。