Что произойдет после последней попытки с опциями повтора в долговременных функциях?
Я использую долговременную функцию, которая срабатывает из очереди. Я отправляю сообщения из очереди в довольно ненадежную службу, поэтому я настроил RetryPolicy. Тем не менее, я хотел бы видеть сообщения об ошибках, даже если максимальное количество попыток исчерпано.
Нужно ли вручную выбрасывать их в очередь недоставленных сообщений (и если да, то мне неясно, откуда я знаю, что сообщение было повторено сколько угодно раз), или же функция естественным образом выбрасывает их в некое состояние письмо / очередь отравлений?
1 ответ
Когда в Durable Functions происходит сбой действия, исключение направляется обратно в оркестровку с FunctionFailedException
выброшены. Неважно, использовали ли вы автоматическую повторную попытку или нет - в самом конце вся деятельность заканчивается неудачей, и вам решать ситуацию. Согласно документации:
try
{
await context.CallActivityAsync("CreditAccount",
new
{
Account = transferDetails.DestinationAccount,
Amount = transferDetails.Amount
});
}
catch (Exception)
{
// Refund the source account.
// Another try/catch could be used here based on the needs of the application.
await context.CallActivityAsync("CreditAccount",
new
{
Account = transferDetails.SourceAccount,
Amount = transferDetails.Amount
});
}
Единственное, что нужно повторить, - это обработать временную ошибку (поэтому вам не нужно включать безопасный маршрут каждый раз, когда у вас возникают, например, проблемы с сетью).