Приостановка и изменение тайм-аутов саги NServiceBus

У меня есть сага, которая представляет собой длительный процесс назначения работы «Человека» на «Дело». Несколько событий могут запустить его, и в конце процесса у нас есть подтверждение назначения, после чего сага завершается, и Человек назначается на Дело. Я хотел бы иметь тайм-аут для этой саги, чтобы мы не ждали подтверждения бесконечно долго — определенно допустимый вариант использования в бизнесе. Там нет никаких сложностей - довольно ванильно.

Суть в том, что этот процесс назначения может быть заблокирован, если кто-то отложит дело. У меня есть событие, на которое я могу подписаться, поэтому моя сага о назначении знает, что дело приостановлено, но если я не изменю тайм-аут или не приостановлю его каким-либо образом, сага о назначении, скорее всего, истечет до того, как дело будет удержано. выпущен. Это не имеет смысла для бизнеса, поэтому я в основном хочу остановить часы тайм-аута, пока не произойдет какое-то другое событие.

Эта же проблема упоминалась здесь пару лет назад. Это по-прежнему невозможно или есть новые функции в v3.x, которые позволили бы это сделать? Если нет, то это запланированная функция?

Спасибо!


person killthrush    schedule 06.02.2013    source источник


Ответы (2)


Я не думаю, что есть способ перейти непосредственно к таймеру и поставить сообщение о тайм-ауте «на удержании».

Я бы использовал эту логику внутри обработчика времени ожидания в саге. Проверьте, не приостановлено ли дело, и запросите еще один тайм-аут, не заканчивая сагу.

person Sarmaad    schedule 06.02.2013
comment
Вам всегда нужно будет иметь дело с состоянием гонки команды onhold, поступающей как раз в тот момент, когда происходит тайм-аут, и в этом случае вы не могли бы фактически кодировать сценарий по-другому, даже если бы вы могли приостановить или изменить тайм-аут. - person Udi Dahan; 07.02.2013
comment
Это правда... поэтому вам нужно знать бизнес-стоимость/разрешение, если время ожидания дела истекло непосредственно перед тем, как дело было приостановлено. - person Sarmaad; 07.02.2013
comment
Спасибо, парни! Я думаю, что этот шаблон будет хорошо работать для меня и для других, поэтому я считаю его ответом. Однако, в зависимости от деталей домена, мне, вероятно, также придется учитывать то, что опубликовал @stephenl. Мы можем не захотеть сбрасывать часы на ноль, а сбросить их на какое-то другое значение, полученное из данных саги. - person killthrush; 07.02.2013

Почему бы вообще не убрать тайм-аут для случая, когда ваше дело приостановлено? Ваша сага поддерживает состояние дела и расчетное время, когда дело должно было быть представлено. Это могло быть установлено, когда вы создали первый тайм-аут. Когда дело повторно активируется, просто рассчитайте разницу во времени от повторной активации и сохраненного «крайнего срока» и создайте новый тайм-аут для этого случая с разницей. Вы также можете принять во внимание время, в течение которого дело было приостановлено, и установить новый крайний срок, который вы сохраните обратно в состояние экземпляра.

person stephenl    schedule 06.02.2013
comment
Просто хотел отдать вам должное за это - я определенно думаю, что мне нужно быть немного более разумным в отношении того, каким должно быть мое значение тайм-аута, когда мое дело будет приостановлено. Я не подумал об этом - спасибо! - person killthrush; 07.02.2013