2

我有一个 Saga 应该等待特定的 Database-Value 被更改。我如何实现这一目标?

例子:

public partial class OrderSaga : Saga<OrderSagaData>, IHandleMessages<FinishOrder> {
   public void Handle(FinishOrder message)
   {
      Order order=new Order(message.OrderId);
      if (order.Approved) {
         SendMail(order);
      }
   }
}

当该订单的布尔“已批准”为真时,我想发送一封邮件。但这可能需要数小时甚至数天。我如何告诉 Saga 在几个小时后再次检查?我是 Sagas 和 NServiceBus 的新手,所以答案可能很简单,但我只是没有找到。

4

1 回答 1

1

如果您仍在等待满足另一个条件,您可以推迟任何传入的消息。这将对消息应用超时并将其放回总线上以供将来处理。

根据您使用的是 NServiceBus 4 还是 5,延迟的方法签名会发生变化,但假设您处于 on 状态V4,然后您可以按照以下方式执行操作:

if (!order.Approved)
{
    Bus.Defer(TimeSpan.FromHours(1), message);
    //This will defer message handling by an hour
}
else
{
    SendMail(order);
}
于 2015-02-16T10:30:05.650 回答