我有一个带有事件网格触发器的Azure函数。已从另一个azure函数完成(手动)将其发布到事件网格主题的发布。
当我运行带有代码的azure函数以发布到带有事件网格触发器的函数时,下面的代码执行一次,正如我从记录器中看到的那样,记录器仅按预期显示一次“发布到事件网格”。
log.Info("Publishing to event grid");
client.PublishEventsAsync(topicHostname,GetEventsList(id).GetAwaiter().GetResult);
但是,带有事件网格触发器的函数被调用了两次,因为我看到带有事件网格触发器的azure函数中下面的行打印了两次
2019-09-27T14:43:16.130 [信息]功能已启动 (Id = dc1ed52a-016b-4b25-8ebf-ac533c3ea84b)
函数执行过程中,它再次显示以下行:
2019-09-27T14:43:16.168 [信息]功能已启动 (Id = 61edb64e-f6ed-4956-851f-59e16fb1dc4e)
我的期望是“功能已启动”应该只出现在日志中一次,而不是两次,因为其他功能正在发布到事件网格主题仅一次。确保带有事件网格触发器的函数仅被调用一次的解决方案是什么?
谢谢
答案 0 :(得分:0)
我的猜测是您正在遵循事件网格重试政策。默认情况下,事件网格将自动重试它认为处理失败的消息。默认情况下,它会等待30秒以等待来自Web挂钩的响应,如果超过30秒,则认为它失败了,可以重试。我的假设是,当您看到它第二次触发时,已经过去了30秒,事件网格正在重试该消息。长时间运行的功能的解决方法是在中间放置一个队列。事件网格可以放入函数触发的队列中,或者函数触发并放入队列中(或持久函数异步编排的踢动),以便事件网格在后台继续工作时立即获得“我得到”响应