Использование саг с восстановлением - PullRequest
0 голосов
/ 20 сентября 2018

У нас проблема с восстановлением для сообщений, исходящих от Sagas.

Когда Saga отправляет сообщение для обработки, обработчик сообщений может иногда завершаться с ошибкой с исключением.В настоящее время мы используем try / catch и, когда возникает исключение, мы «отвечаем» неудачным сообщением Saga.Проблема этого подхода заключается в том, что повторных попыток восстановления не происходит, поскольку мы обрабатываем ошибку в обработчике сообщений.

Я думал о том, чтобы добавить пользовательскую логику в конвейер, и если сообщение Command реализует некоторый специальный интерфейс,пользовательская логика будет отправлять неудачный ответ на сообщение Saga, если произойдет исключение (после неудачных попыток), но я не уверен, куда подключить конвейер, который позволил бы мне отправлять сообщения после неудачных попыток.

Это правильный подход?Если нет, как я могу решить для сообщений об ошибках Saga to Handler после повторных попыток?

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете использовать немедленную отправку , чтобы не ждать завершения обработчика.

Однако я хотел бы предложить альтернативный подход.Почему бы не создать Тайм-аут в саге?Если ответ от обработчика не получен в течение определенного промежутка времени, вы выбираете альтернативный путь.Обработчик получает 5 минут, и если он не отвечает в течение 5 минут, мы делаем что-то еще.Если он все еще отвечает через 6 минут, мы знаем, что мы уже выбрали альтернативный путь (используйте логический флаг или около того и сохраните его внутри данных саги) и отложите ответ, который пришел слишком поздно.

ЕслиВы хотите начать обсуждение, основываясь на этом, проверьте нашу платформу сообщества .

...