Есть ли способ пометить транзакцию как неудачную и заставить оркестратор увеличить счетчик повторных попыток, но в то же время отложить обработку транзакции, скажем, на 2 часа?
В моем сценарии я ищу некоторые данные в базе данных, и если они не найдены, я хочу пометить транзакцию как неудавшуюся и увеличить количество повторных попыток до 1 в оркестраторе, и я хочу, чтобы эта неудавшаяся транзакция была отложена на пару часов.
Предполагая, что база данных в конечном итоге будет обновлена соответствующими данными через час, когда оркестратор запускает соответствующего бота и пытается повторно обработать транзакцию через 2 часа, она будет успешной.
Если, с другой стороны, база данных по-прежнему не содержит данных и прошло 2 часа, транзакция снова завершится ошибкой, и мне нужно, чтобы оркестратор увеличил повторную попытку до 2, и он отложит ее еще на 2 часа.
Наконец, если через 2 часа данных все еще нет (т.е. прошло 6 часов), я хочу, чтобы транзакция снова завершилась неудачей, увеличьте количество повторных попыток до 3 и прекратите попытки обработать его, предполагая, что оно достигло максимального количества повторных попыток, установленного в очереди в оркестраторе. Вероятно, он отправит электронное письмо, чтобы уведомить администратора.
Я не понимаю нескольких вещей:
Почему не повторяется бизнес-исключение. Для меня вышеупомянутый сценарий представляет собой сбой бизнес-правила (т. Е. Данные не найдены в базе данных), но если я понял, что говорится в рабочем процессе «Установить статус транзакции», он не будет пытаться повторно обработать исключение бизнес-правила. Для меня это не имеет смысла, по крайней мере, исходя из моего сценария.
Означает ли это, что единственный способ увеличить счетчик повторов в оркестраторе - это создать системное исключение? Это просто неправильно, и я не хочу делать снимок в соответствии с SetTransactionStatus при работе с такого рода исключениями. Я что-то упускаю??
Также при вызове действия отложенного действия я вижу, что он меняет статус транзакции с «не удалось» на «новый», что тоже не идеально, но при необходимости можно смириться с этим. Для меня важно то, что счетчик повторных попыток не сбрасывается в оркестраторе при его вызове, но поскольку при вызове отложенного действия статус изменяется с неуспешного на новый, я обеспокоен тем, что он сбросит счетчик, который будет проблема.
Я еще не проверил, остается ли количество повторных попыток при вызове действия "Отложить", поскольку я еще не прошел через весь процесс.
Как правильно этого добиться? Можно ли этого добиться?
Спасибо
PS: Прошу прощения за объемный пост, но я подумал, что предоставил как можно больше подробностей.
ОБНОВЛЕНИЕ-1
@kwoxer предположил, что это может быть повторяющийся вопрос, но я не думаю, что это так.
Сообщение введите здесь описание ссылки касается того, что происходит с статусы, когда транзакция создается и вызывается какое-то действие для изменения статуса, но оно не касается того, как обработать неудачное бизнес-правило и как бороться с повторными попытками.
Как уже упоминалось, отсутствие данных и желание повторить попытку через несколько часов должно быть достижимо с использованием встроенных функций, но при этом рассматривается как исключение бизнес-правила, а также полагаться на счетчик повторных попыток, чтобы эта операция не продолжалась вечно.
Это также должно дать вам больше контроля над тем, что должно произойти со статусом, то есть отложенная неудачная транзакция должна быть действительной, и статус не должен сбрасываться на Новый, или, по крайней мере, у вас должна быть возможность установить, какой статус должен быть установлен.
В своем ответе на @kwoxer я опубликовал потенциальное решение, но я думаю, что это некрасиво, и мне очень хотелось бы, чтобы был способ справиться с этим с помощью встроенных функций, и я надеюсь, что кто-то может предложить что-то, что я, возможно, пропустил или лучший обходной путь.
Спасибо.