【问题标题】:Saga Wait for Status valueSaga 等待状态值
【发布时间】:2015-02-16 10:21:09
【问题描述】:

我有一个 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);
      }
   }
}

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

【问题讨论】:

  • 您是否有能力在订单获得批准时发布事件?如果是这样,请从您的传奇中订阅该事件。

标签: c# nservicebus saga nservicebus-sagas


【解决方案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);
}

【讨论】:

  • 没问题,NServiceBus 一开始用起来有点吓人,而且功能也很愚蠢。在过去的几个月中遇到并克服了很多警告,我会告诉你:)
猜你喜欢
  • 2019-05-13
  • 2022-08-22
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多