Почему подписки на таблицы событий Azure отправляют дубликаты событий с разными идентификаторами?

Я настроил подписку на сетку событий, чтобы инициировать вызов веб-ловушки для событий в группе ресурсов при создании ресурса.

Вызов веб-перехвата успешно обработан, и я возвращаю 200. Чтобы поддерживать идемпотентность, я сохраняю все события, произошедшие в таблице веб-перехватов, с идентификатором события и проверяю все входящие события, чтобы увидеть, существуют ли они в этой таблице.

Это проблематично для меня, потому что я получаю одно и то же событие несколько раз с разными идентификаторами. Я отправил его через проверку различий и подтвердил, что единственными различиями между событиями являются их eventTime и их идентификатор (но это касается одного и того же события, Microsoft.Resources.ResourceWriteSuccess в базе данных SQL).

Есть ли причина, по которой Event Grid отправляет мне одно и то же событие несколько раз с разными идентификаторами?

0 ответов

Так реализован EventGrid, если вы посмотрите документацию

Если конечная точка отвечает в течение 3 минут, Сетка событий попытается удалить событие из очереди повторов в максимально возможной степени, но дубликаты все равно могут быть получены.

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

В id Поле фактически является уникальным для каждого события и остается идентичным между повторными попытками и поэтому может использоваться для дедупликации.

Вы столкнулись с конкретной проблемой, связанной с некоторыми событиями, создаваемыми Azure Resource Manager (ARM). В частности, два события, которые вы видите, на самом деле являются отдельными событиями, а не дубликатами, генерируемыми ARM на разных этапах творческого потока для некоторых типов ресурсов.

ARM действует как входная дверь API для различных служб Azure и генерирует набор событий, которые являются обобщенными, и часто для получения подробностей о том, что произошло, вам нужно заглянуть в полезную нагрузку данных. Например, ARM будет генерировать событие успеха для каждого кода состояния 2xx, который он получает от службы Azure, поэтому 202 принято и 201 создано может привести к отправке двух событий, и единственный способ увидеть разницу будет в полезной нагрузке данных..

Это известная проблема, и мы работаем над тем, чтобы генерировать больше событий с высокой точностью, которые будут более четкими и на которые будет легче реагировать в этих сценариях. Идеальное состояние - это своего рода лента изменений для плоскости управления Azure.

Другие вопросы по тегам