【问题标题】:Rebus - Deferred Message, exactly one message handlerRebus - 延迟消息,正是一个消息处理程序
【发布时间】:2015-01-12 04:20:57
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: rebus


    【解决方案1】:

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

    var delay = utcTimeOfWhenToDeliverTheMessage - DateTime.UtcNow;
    
    bus.Defer(delay, messageToPostpone);
    

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

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

    在 Rebus 配置中。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2020-03-28
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多