NServiceBus延迟消息处理

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

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

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

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

考虑实现一个存储第一条消息的传奇 ,保留它直到第二条消息到来。 您可能还希望saga也打开超时 ,这样如果第二条消息丢失或某事,您的进程将无法无限期地等待。