我正在使用Azure功能处理来自IOT集线器的消息并输出到Blob存储。 enter image description here
但是当我高频发送时,该功能错过了IOT消息。 例如,我从20:40:16到20:40:23发送30条消息,但是只有3条消息被处理并存储到Blob存储中,剩下的27条消息我不理想。 enter image description here
我正在使用函数使用计划,Azure宣布它将根据负载自动缩放。 但是从上面的活动日志来看,它只有一个线程正在运行,甚至没有将输入排队,并导致某些消息丢失。
那么,我应该怎么做才能捕获来自IOT集线器的所有消息?
答案 0 :(得分:0)
消费计划中的Azure功能可以处理此负载,但是您可能想在IoT中心中创建一个可以使用该功能的单独的消费者组。在Azure门户中,转到“内置终结点”并添加一个新的使用者组。
然后您必须在功能中指定要使用的消费者组
[FunctionName("Function1")]
public static async Task Run([IoTHubTrigger("messages/events",ConsumerGroup = "functions", Connection = "EventHubConnectionAppSetting")]EventData message,
我用消耗计划测试了此功能,该功能侦听IoT中心的默认终结点,并以8秒的延迟写入blob存储,以使其更像您的功能。无论发送30或100封邮件,我都看不到邮件丢失的情况。确保没有其他应用程序在使用您的新消费者组!
答案 1 :(得分:0)
自己找到解决方案。 触发器需要从Azure事件中心更改为事件网格触发器,如下图所示。