Saga 等待状态值
Saga Wait for Status value
我有一个 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);
}
}
}
当该订单的布尔值 "Approved" 为真时,我想发送一封邮件。但这可能需要数小时甚至数天。我如何告诉 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);
}
我有一个 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);
}
}
}
当该订单的布尔值 "Approved" 为真时,我想发送一封邮件。但这可能需要数小时甚至数天。我如何告诉 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);
}