3

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

  • 为将来的日期排队消息
  • 如果有一条消息 ProcessInvoice 的上下文如 Customer Id: 1000,我们可以让一个处理程序执行该消息吗?因此,如果消息重复,则不会再次处理。

谢谢

4

1 回答 1

1

当然 - Rebus 可以在未来bus.Defer发送一些消息TimeSpan- 例如将消息的传递推迟到某个特定日期,这样的事情可以做到:

var delay = utcTimeOfWhenToDeliverTheMessage - DateTime.UtcNow;

bus.Defer(delay, messageToPostpone);

这要求已配置超时管理器。您可以通过以下方式配置超时管理器

Configure.With(...)
    .(...)
    .Timeouts(t => t.(...))

在 Rebus 配置咒语中。

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

于 2014-11-15T15:51:51.523 回答