Я представляю Служебная шина Azure и Функция Azure в устаревшей системе, где большинство служб находятся в локальном центре обработки данных. ASB получит событие с именем CC_SUBMITTED, и для этого события будет запущена функция Azure с именем ОплатаСервис.
Бизнес-логика в Функция Azure может дать сбой из-за ошибки данных или вызова сторонней службы в функции может вернуть исключение. Если ошибка в данных, данные будут исправлены вручную и снова запустится логика.
Следует ли отправлять событие CC_SUBMITTED обратно в ESB из функции Azure ОплатаСервис, если не удается повторно обработать сообщение? Есть ли встроенная функция в служебной шине Azure для повторной отправки сообщения?
Is there any built-in feature in Azure Service Bus to retry the message?
Не в служебной шине Azure как таковой, но это обрабатывается с помощью функций. Если Функция завершается с ошибкой, сообщение отправляется обратно в служебную шину, а затем через некоторое время будет повторена попытка. Процесс будет повторяться до тех пор, пока либо функция не выполнится успешно, либо сообщение не станет недоставленным.
Should I send the event CC_SUBMITTED back to the ESB from the Azure Function PaymentService if there is a failure to reprocess the message?
Обычно нет, но в вашем случае я бы сказал да. Причина, по которой я говорю «да», заключается в том, что, основываясь на информации, которую вы предоставили в сообщении, обычно процесс завершается сбоем из-за проблем с данными и требует некоторого ручного исправления данных. Таким образом, нет смысла повторять операцию, если мы знаем, что она будет успешной только после исправления данных.
Однако, если операция завершается со сбоем из-за временных ошибок, встроенный в функцию механизм повторных попыток должен справиться с этим.
Вы, конечно, можете это сделать. Позвольте сообщению стать недоставленным, а затем запустите отдельную функцию Azure, которая запускается каждый день (или с другой частотой), чтобы переместить сообщение из подочереди недоставленных сообщений в основную очередь, чтобы его могла выбрать ваша основная функция.
Каково ваше предложение о том, как инициировать повторную попытку того же сообщения через день, когда данные исправлены? Должен ли я написать Функция Azure, который запускается каждый день, собирает ошибочные сообщения и снова отправляет их в очередь?