我有一个带有事件网格触发器的 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/