Rebus-延迟消息,仅一个消息处理程序

Rebus-延迟消息,仅一个消息处理程序,rebus,Rebus,我想知道Rebus服务总线是否可以处理以下用例: 为将来的日期对消息进行排队 如果有一个上下文类似于Customer Id:1000的消息ProcessInvoice,那么我们可以让一个处理程序执行该消息。因此,如果消息被复制,则不会再次对其进行处理 谢谢当然-Rebus可以总线。将消息推迟到某个时间间隔到将来-例如,将消息的传递推迟到某个特定日期,类似这样的事情可以做到: var delay = utcTimeOfWhenToDeliverTheMessage - DateTime.Utc

我想知道Rebus服务总线是否可以处理以下用例:

  • 为将来的日期对消息进行排队
  • 如果有一个上下文类似于Customer Id:1000的消息ProcessInvoice,那么我们可以让一个处理程序执行该消息。因此,如果消息被复制,则不会再次对其进行处理

谢谢

当然-Rebus可以
总线。将消息推迟到某个
时间间隔
到将来-例如,将消息的传递推迟到某个特定日期,类似这样的事情可以做到:

var delay = utcTimeOfWhenToDeliverTheMessage - DateTime.UtcNow;

bus.Defer(delay, messageToPostpone);
这要求已配置超时管理器。您可以通过以下方式配置超时管理器

Configure.With(...)
    .(...)
    .Timeouts(t => t.(...))
在Rebus配置咒语中

如果你想保证一个给定的消息只处理一次,即使复制可能被传递,有两件事要考虑-很难告诉你最简单的方法来处理它,因为有时很容易简单地执行所执行的动作,其他时候,您需要跟踪已处理消息的ID等