Azure Function 错过 IoT 触发器

Azure Function miss IoT trigger

我正在使用 Azure 函数处理来自 IOT 中心的消息并输出到 Blob 存储。 enter image description here

但是当我高频发送时,该功能错过了 IOT 消息。 例如,我从 20:40:16 向 20:40:23 发送了 30 条消息,但只有 3 条消息被处理并存储到 Blob 存储中,我不清楚其余 27 条消息去了哪里。 enter image description here

我正在使用函数消耗计划,Azure 声明它将根据负载自动缩放。 但是从上面的 activity 日志来看,它只有一个线程 运行 并且甚至没有将输入排队并导致一些消息丢失。

那么,我应该怎么做才能捕获来自物联网集线器的所有消息?

消费计划中的 Azure Functions 可以处理此负载,但您可能希望在 IoT 中心创建一个单独的消费者组供 Function 使用。在 Azure 门户中,转到内置端点并添加一个新的使用者组。

然后您必须在函数中指定要使用的消费者组

    [FunctionName("Function1")]
    public static async Task Run([IoTHubTrigger("messages/events",ConsumerGroup = "functions", Connection = "EventHubConnectionAppSetting")]EventData message, 

我使用消费计划函数对此进行了测试,该函数侦听 IoT 中心默认端点并以 8 秒的延迟写入 blob 存储,以使其更像您的函数。无论发送 30 条还是 100 条消息,我都没有看到消息丢失。确保没有其他应用程序正在使用您的新消费者组!

自己找到了解决方案。 触发器需要从 Azure 事件中心更改为事件网格触发器,如下图所示。

Azure Event Hubs Azure Grid Trigger