我有一个传奇,应该等待特定的数据库值被更改。我该如何实现?

例:

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


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

最佳答案

如果您仍在等待满足其他条件,则可以推迟任何传入消息。这将使消息超时,然后将其放回总线上以备将来处理。

根据您使用的是NServiceBus 4还是5,延迟的方法签名将发生变化,但是假设您使用的是V4,则可以按照以下步骤进行操作:

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

关于c# - 佐贺等待状态值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28539169/

10-12 12:37
查看更多