1

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

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

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

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

4

1 回答 1

4

考虑实现一个存储第一条消息的saga,一直保存到第二条消息到达。您可能还希望 saga 也打开超时,这样如果第二条消息丢失或其他情况,您的进程就不会无限期地等待。

于 2009-08-21T19:16:33.583 回答