【发布时间】:2021-01-22 23:18:07
【问题描述】:
我有一个由事件网格事件触发的 Azure 函数。事件网格事件仅在将 blob 上传到存储帐户时创建。
尽管由于某种原因,即使成功处理,该函数仍不断被同一事件触发,但现在已部署并运行良好?
示例:
代码 sn-p:
def main(event: func.EventGridEvent):
result = json.dumps({
'id' : event.id,
'data' : event.get_json(),
'topic' : event.topic,
'subject' : event.subject,
'event_type' : event.event_type
})
logging.info('EventGrid trigger processing an event: %s', result)
credential = DefaultAzureCredential()
download_start_time = datetime.datetime.now()
logging.info(f'######## Starting downloading blob from storage at ' + str(download_start_time) + ' ########')
# =============================
# Download blob from storage container:
# =============================
blob_client = BlobClient.from_blob_url(event.get_json()["url"], credential)
blob_data = blob_client.download_blob().readall()
blob_byte_stream = io.BytesIO(blob_data)
编辑 1:这仍在发生,这次有点不同。
- 现在,EventGrid 在成功传递消息并且函数运行后继续触发
如何调试?
【问题讨论】:
-
您的堆栈似乎有问题。你用的是虚拟环境吗?你能发布一些细节,比如你的测试代码吗?
-
我在本地开发环境中使用
.venv,但此函数是在 Azure 中托管和触发的,而不是在本地。我没有任何测试代码要分享。该函数现已停止触发,但我想了解将来如何调试此问题。 -
好的...由于我们看不到您的代码,我不相信原因。但是我看到有一个 _download.py 文件,你是要下载已经删除的 blob 吗?也许你应该检查一下。@ericOnline
-
用于测试目的:设置 maxDeliveryAttempts = 3 和 dead-lettering,这将为您提供有关失败交付的更多详细信息,docs.microsoft.com/en-us/azure/event-grid/…
-
这种情况仍在发生。这很烦人(特别是因为我们按函数调用收费)。为什么EventGrid在成功传递消息后一直触发?
标签: azure-functions azure-eventgrid