2014-11-14 36 views
2

我想知道如果卤面服务总线可以处理以下用例:卤面 - 递延信息,只有一个消息处理程序

  • 队列消息未来日期
  • 如果有一个消息ProcessInvoice像客户Id:1000这样的上下文,我们是否可以只有一个处理程序执行消息。所以如果消息被复制,它不会再被处理。

由于

回答

1

当然 - Rebus的可以bus.Defer消息一些TimeSpan到未来 - 例如推迟的消息给一些特定的日期交货,这样的事情可以做:

var delay = utcTimeOfWhenToDeliverTheMessage - DateTime.UtcNow; 

bus.Defer(delay, messageToPostpone); 

这就要求超时经理已配置。您可以通过配置超时管理器

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

中的Rebus配置法术。

如果你想保证一个给定的消息只处理一次,即使可能传送重复数据,也需要考虑几件事情 - 很难告诉你处理它的最简单方法,因为有时它可能很容易只需执行idempotent,其他时间您需要跟踪处理的消息的ID等。