具有事件网格触发器的 Azure 函数被调用两次,而其他 Azure 函数仅发布一次

标签 azure azure-functions

我有一个带有事件网格触发器的 Azure 函数。发布到已订阅(手动)的事件网格主题是通过另一个 azure 函数完成的。

当我使用代码运行 azure 函数以通过事件网格触发器发布到函数时,下面的代码将执行一次,正如我从记录器中看到的那样,它仅按预期显示“发布到事件网格”一次。

log.Info("Publishing to event grid");
client.PublishEventsAsync(topicHostname,GetEventsList(id).GetAwaiter().GetResult);

但是,具有事件网格触发器的函数被调用两次,因为我可以看到下面的行在具有事件网格触发器的 azure 函数中打印了两次

2019-09-27T14:43:16.130 [Info] Function started (Id=dc1ed52a-016b-4b25-8ebf-ac533c3ea84b)

当该函数正在执行时,它再次显示以下行:

2019-09-27T14:43:16.168 [Info] Function started (Id=61edb64e-f6ed-4956-851f-59e16fb1dc4e)

我的期望是“函数已启动”应该只出现在日志中一次而不是两次,因为其他函数只发布到事件网格主题一次。有什么解决方案可以确保具有事件网格触发器的函数仅被调用一次?

谢谢

最佳答案

我的猜测是您正在执行事件网格重试策略。默认情况下,事件网格将自动重试它认为处理失败的消息。默认情况下,它会等待 30 秒以等待网络钩子(Hook)的响应,如果超过 30 秒,它会认为失败并可能重试。我的假设是,当您看到它第二次触发时,30 秒已经过去,事件网格正在重试该消息。运行时间较长的函数的解决方法是在中间有一个队列。事件网格放入函数触发的队列中,或者函数触发并放入队列中(或启动持久函数异步编排),以便事件网​​格立即获得“我明白了”响应,同时工作在后台继续进行.

关于具有事件网格触发器的 Azure 函数被调用两次,而其他 Azure 函数仅发布一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58137373/

相关文章:

azure - 在 Azure 数据工厂复制事件中使用 'Additional columns' 时,如果该列已存在于源中,它是否会在接收器端复制该列?

node.js - 列出 AWS key ,然后迭代返回每个 key 值

azure - 如何从我的 Azure 函数向 Azure 服务总线发布消息?

azure - 如何使用 Azure 服务近乎实时地监听 GCP 发布/订阅

azure - 无法通过门户下载azure功能的应用程序内容

azure - Azure Functions 上的 VCRedist 2015+

linux - 在 Linux 上的脚本中使用 azcopy 时如何避免出现提示?

azure - 将容器名称作为参数传递给 BlobTrigger

azure - App Insights 工作簿 - 是否可以更改堆叠列的顺序?

azure - Azure 应用程序中的二级子域