Привязка вывода использует SDK 1.13.2, в котором уже есть механизм повтора.
Предполагается, что вы используете функции Azure v1, если вы используете IAsyncCollection , которую будет выполнять функцияUpsertDocumentAsync
для каждого AddAsync
, если вы используете один выходной документ, тогда UpsertDocumentAsync
должно происходить один раз.
В любом случае SDK по умолчанию повторяется 9 раз на удушенный результат, после этого, исключение всплывает, и ваша функция выдаст ошибку;документ должен возвращаться в очередь для повторения в соответствии с дизайном QueueTrigger
, и после нескольких итераций он переходит в очередь deadletter.
Если вы хотите более детальный контроль потока, вы можетеполучите DocumentClient
и выполните UpsertDocumentAsync
самостоятельно с помощью попытки / уловки. Если она не удалась более 9 раз, вы можете выбрать отправку в другую очередь или повторить попытку еще раз.Что-то вроде:
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
[FunctionName("CosmosDBSample")]
public static async Task<HttpResponseMessage> Run(
[QueueTrigger("my-queue")] MyPOCOClass myMessage,
[DocumentDB("test", "test", ConnectionStringSetting = "CosmosDB"] DocumentClient client,
TraceWriter log)
{
try
{
await client.UpsertDocumentAsync(myMessage);
}
catch(DocumentClientException ex)
{
// retry / queue somewhere else?
log.Warning($"DocumentClientException {ex.Message} in document {myMessage.Id}.");
}
}