Да, вы можете удалить одно и то же сообщение дважды.
Причины
1. Рабочий A удаляет сообщение B, и время ожидания невидимости истекает. Сообщение B снова становится видимым, и работник C удаляет сообщение B, аннулируя всплывающую квитанцию работника A. Работник А заканчивает работу, переходит к удалению сообщения Б и выдает ошибку. Это наиболее распространенный.
2. Вероятно, истекает время блокировки исходного сообщения, запускающего первую функцию Azure. Это заставит очередь предположить, что обработка сообщения не удалась, и затем она будет использовать это сообщение для повторного запуска функции.
3. При определенных условиях (очень частый опрос очереди) вы можете получить одно и то же сообщение дважды на GetMessage
. Это тип расы, который встречается редко. Рабочие A и B опрашивают очень быстро и одновременно попадают в очередь, и оба получают одно и то же сообщение. Раньше это было гораздо более распространенным (временные рамки SDK 1.0) в сценариях с высоким опросом, но теперь оно стало намного реже в более поздних обновлениях хранилища (не могу вспомнить, увидев это недавно).
1 и 3 имеют место только когда у вас более 1 работника.
Обход
Установка azure-webjobs-sdk
версии 1.0.11015.0 (отображается на странице «Настройки» портала «Функции»). Для получения более подробной информации вы можете обратиться к исправлению обновлений видимости очереди