2015-02-16 7 views
2

У меня есть сага, которая должна ждать изменения значения базы данных. Как мне это достичь?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 "Approved" этого ордена истинно Я хочу отправить почту. Но это может занять несколько часов или даже дней. Как я могу снова сказать Саге через несколько часов? Я новичок в Sagas и NServiceBus, поэтому ответ может быть тривиальным, но я просто не нашел его.

+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); 
} 
+0

Спасибо, ваше предположение тоже было правдой :) –

+1

Нет проблем, NServiceBus немного запутанный, чтобы использовать его вначале, а также глупо сильным. За последние пару месяцев появилось много предостережений, и я скажу вам: –