Azure Function Event Grid触发器重复接收Blob创建事件的可能原因
Blob创建事件重复接收的可能原因分析
事件响应超时或状态码异常:Event Grid要求接收端必须在30秒内返回200-202范围内的状态码,确认事件已接收。如果你的Azure Function(本地调试场景同理)处理逻辑耗时过长,或是返回了5xx、4xx这类错误状态码,Event Grid会判定事件未被成功处理,进而触发重试推送。
Event Grid内置重试机制触发:Event Grid默认带有重试策略,会在24小时内按指数退避间隔(如10秒、30秒、1分钟、5分钟等)重复推送未确认的事件。如果函数执行过程中出现崩溃、报错等异常,导致事件未被正确处理,就会触发该机制,造成重复接收。
接收端未实现幂等处理:如果你的函数没有针对事件ID(每个Event Grid事件都有唯一的
id字段)做去重逻辑,即使是Event Grid正常重试的重复事件,也会被当成新事件执行处理,让你感知到重复接收。另外,若函数处理成功但未正确记录处理状态,也可能误将重试事件当成重复问题。ngrok隧道连接不稳定:本地调试时,ngrok的隧道可能出现短暂断连、延迟或数据包丢失,导致Event Grid发送的事件未被本地函数正确接收,触发重试;或是ngrok重连后,之前未确认的事件被重新推送,引发重复接收现象。
Blob存储端异常生成重复事件:这种情况概率极低,但不排除Blob存储因内部故障重复生成了相同的Blob创建事件,导致Event Grid多次推送。
内容的提问来源于stack exchange,提问作者Dyaneshwaran S
相关产品推荐
相关产品推荐

