Как вручную удалить сообщение из очереди с помощью Python Azure Functions QueueTrigger?

Я использую триггер очереди функций Azure для чтения сообщения очереди и обработки работы в Python. У меня параметр batchSize установлен в 1, чтобы ограничить параллелизм. В коде Python у меня есть дополнительная проверка, чтобы увидеть, готова ли работа к обработке, как в:

if work is ready:
    do_work()
else:
    dequeue the message and try again

Я хочу удалить сообщение из очереди, если работа не готова к обработке, и повторить попытку через одну минуту. Думаю, я смогу повторить попытку, просто установив visibilityTimeout на 00:01:00. Но как лучше всего удалить сообщение из очереди? Было бы просто:

if work is ready:
    do_work()
else:
    raise Exception("work is not ready, dequeue the message")

Позволит ли это удалить сообщение из очереди и принять его для повторной попытки в течение одной минуты? Этот вариант использования довольно редок, и мне интересно, есть ли лучший способ, потому что я не уверен, хочу ли я видеть ошибку в своих журналах для этого случая.

Изменить: можно ли использовать initialVisibilityDelay в моем Python QueueTrigger? Это избавило бы меня от необходимости генерировать исключение, если бы я мог задержать отображение своих сообщений на одну минуту.


person ddx    schedule 27.10.2020    source источник


Ответы (1)


можно ли использовать initialVisibilityDelay в моем Python QueueTrigger?

Как вы изначально помещаете свои сообщения в очередь? Если это с Привязка выходных данных хранилища очередей Azure, то я думаю, вы не сможете легко установить начальную задержку видимости.

Однако вы можете архивировать то, что хотите, используя очередь put_message:

put_message(queue_name, content, visibility_timeout=None, time_to_live=None, timeout=None)

Как видите, он принимает параметр visibility_timeout, чтобы сделать сообщение активным после определенной задержки, что вам и нужно, если я правильно понял.

person Michał Żołnieruk    schedule 28.10.2020
comment
Я использую подписку на сетку событий для событий Blob Created. Я бы предпочел использовать сетку событий вместо создания новой функции Azure, которая использует put_message(), потому что это сэкономит ресурсы. - person ddx; 29.10.2020