Saga等待状态值

时间:2015-02-16 10:21:09

标签: c# nservicebus saga nservicebus-sagas

我有一个Saga应该等待更改特定的数据库值。我如何实现这一目标?

示例:

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

当该命令的bool“已批准”为真时,我想发送邮件。但这可能需要数小时甚至数天。如何在几小时后告诉佐贺再次检查? 我是Sagas和NServiceBus的新手所以答案可能很简单,但我没找到它。

1 个答案:

答案 0 :(得分:1)

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

根据您是否使用NServiceBus 4或5,延期的方法签名会发生变化,但让我们假设您已经V4,您可以随时执行这句话:

if (!order.Approved)
{
    Bus.Defer(TimeSpan.FromHours(1), message);
    //This will defer message handling by an hour
}
else
{
    SendMail(order);
}