Как получить и удалить несколько сообщений из очереди хранилища Azure с помощью метода CloudQueue.GetMessagesAsync ()?

У меня есть TimerTrigger Функция Azure, которая срабатывает каждую минуту. Когда он срабатывает, я читаю определенное количество сообщений из своей очереди с помощью этого кода:

cloudQueue.GetMessagesAsync(32);

И когда я закончу с этим, я вижу, что сообщение снова становится видимым в очереди, хотя функция НЕ обнаружила никаких ошибок.

Я просмотрел эти ответы, но все они говорят, что если у вас нет ошибок в вашей функции во время выполнения, сообщения следует удалять из очереди:

Хранилище очередей Azure запущено без удаления сообщения

Функция Azure и очередь хранилища, что делать, если функция не работает

Но мои сообщения не удаляются.

Вот мой код функции:

[FunctionName("MyFunctionName")]
public static async Task SchedulerFunction([TimerTrigger("0 */1 * * * *", RunOnStartup = false)]TimerInfo myTimer, [Queue("my-queue-name", Connection = "AzureWebJobsStorage")]CloudQueue cloudQueue)
{
    var messages = await cloudQueue.GetMessagesAsync(32);

    await ProcessSomethingOnMessagesWithoutAnyErrors(messages);
}

Что мне нужно, так это удалить собранные сообщения из очереди после того, как я получил их cloudQueue.GetMessagesAsync(32);, и если он не удастся 3 раза, переместить их в my-queue-name-poison очередь. Если мне нужно использовать какой-либо конкретный RetryPolicy, не стесняйтесь рекомендовать его.


person Soheil Farahani    schedule 11.09.2019    source источник
comment
Вы хотите удалить сообщение, если вы успешно обработали и удалили сообщение в другую очередь после трех повторных попыток?   -  person Jim Xu    schedule 11.09.2019
comment
@JimXu Да, если он обработан успешно, я ожидаю, что он будет удален, в противном случае переместите его в подозрительную очередь, и это обычная практика, потому что мы не хотим, чтобы некоторые ошибочные сообщения оставались в очереди после 3 неудачных попыток.   -  person Soheil Farahani    schedule 11.09.2019
comment
Не могли бы вы предоставить документ, на который вы ссылаетесь?   -  person Jim Xu    schedule 11.09.2019
comment
Согласно моим исследованиям, если вы хотите обработать сообщение в очереди, мы можем использовать queuetrigger. Дополнительные сведения см. В документации. .microsoft.com / en-us / azure / azure-functions /.   -  person Jim Xu    schedule 11.09.2019
comment
@JimXu Спасибо за подсказку, я уже использовал QueueTrigger для других целей, но в этом случае, когда я задал вопрос, мне нужно обрабатывать мою очередь каждую минуту, не менее минуты. Вы также можете посетить ссылки, которые я предоставил для справки.   -  person Soheil Farahani    schedule 11.09.2019


Ответы (1)


Если это не удается три раза, переместите их в очередь my-queue-name-dog .

Согласно моим исследованиям, тигр таймера функции Azure не имеет поведения повтора. Если вы не можете обработать одно сообщение в одном триггере, вам необходимо обработать его до следующего раза по расписанию. Для получения дополнительных сведений см. документ. введите описание изображения здесь

Мне нужно удалить собранные сообщения из очереди после того, как я получил их с помощью cloudQueue.GetMessagesAsync (32);

Согласно моему тесту, нам нужно вручную удалить сообщение из очереди. Триггер таймера не может помочь нам завершить это. Итак, что касается необходимости, вам нужно реализовать это своим кодом.

person Jim Xu    schedule 12.09.2019