【问题标题】:Azure - Sending data from IoT Hub to Web App BackendAzure - 将数据从 IoT 中心发送到 Web 应用后端
【发布时间】:2019-11-23 16:20:47
【问题描述】:

我正在寻找一种解决方案,将数据从 Azure IoT 中心获取到同样托管在 Azure 中的 Web 应用程序的后端,该应用程序是用 ASP.NET 4.6 编写的。 最好尽快接收原始 Json 字符串。

我发现其他人建议将 Webhooks 或 Azure 函数用于类似目的,但这些解决方案带来的延迟确实不能接受。 最好直接连接到 IoT 端点并获取每条传入的消息。任何人都可以指出正确的方向吗?

【问题讨论】:

  • 那么为什么要使用 IoT Hub?您不能将数据直接发送到您的 Web 应用程序吗?
  • 我只提到了整个应用程序的一小部分。数据在其他服务中存储和处理。 IoT 中心充当所有设备和数据的收集点。
  • 后端Web App消费的事件是否需要按顺序处理?
  • 不,他们不是。快速处理它们很重要,但顺序不是。
  • 好的,在这种情况下,为了比较 Push-PullPush-Push 事件之间的延迟时间,制作一个 webhook 处理程序在您的 Web 应用程序中,并使用 eventType = Microsoft.Devices.DeviceTelemetry 上的过滤器订阅 iothub 主题的 Azure 事件网格。请注意,IoT 中心在路由步骤期间(例如在将其摄取到内部事件中心之前)将此事件触发(推送)到 AEG,因此这非常接近实时,并且 AEG 目标处理时间可能约为 1女士。

标签: asp.net azure azure-web-app-service azure-iot-hub read-data


【解决方案1】:

您可以简单地在您的 Web 应用程序中使用 EventHub .NET SDK,连接到 IoT 中心的 EventHub-compatible endpoint 并直接使用您的应用程序中的事件。这具有最小的延迟并且不涉及额外的组件。

如何指导(.NET core 但同样适用于.NET Framework):https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-dotnet-standard-getstarted-send#receive-events

var eventProcessorHost = new EventProcessorHost(
            EventHubName,
            PartitionReceiver.DefaultConsumerGroupName,
            EventHubConnectionString,
            StorageConnectionString,
            StorageContainerName);

// Registers the Event Processor Host and starts receiving messages
await eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>();

【讨论】:

  • 谢谢,这看起来是理想的解决方案。我会调查并报告。
  • 但是在 Webjob 中执行,因为将 Web 应用程序作为后台工作人员运行会直接导致问题(如果没有流量到达公共端点,大多数 PaaS 平台会暂停应用程序,这会完全停止您的处理) .
  • 用命令行应用程序对其进行了测试,它就像一个魅力。现在剩下要做的就是将它实现到 ASP.NET 应用程序中。我认为在 Webjob 中运行 EventProcessor 应该可以完成这项工作,所以我认为我的问题得到了解答。再次感谢!
【解决方案2】:

Azure SignalR Service 可以帮助将消息广播到 Web App 实例。

Azure IoT 中心和 Azure SignalR 服务之间没有直接集成。基本上,您可以使用两种模式进行这种集成,例如 PULL-PUSHPUSH-PUSH

以下屏幕显示了这些集成模式:

请注意,带有 Azure 事件网格的 PUSH-PUSH 模式适用于当订阅者(消费者)对按顺序处理事件并不重要时的解决方案。

【讨论】:

  • SignalR 其实主要是把内容更新推送到前端。 OP 只提到他想将数据放入他的 Web 应用程序的后端。此外,就最小延迟而言,这引入了一些额外的层,每个层都会增加一些延迟。
  • @silent,你说得对,他提到只将数据放入 azure 后端,所以你在 Web App 中使用 EventProcessorHost 的答案是如何最大限度地减少使用 iot 集线器遥测数据的延迟时间。
  • silent 提到的解决方案对于我的问题来说似乎是一个更可行的选择,但感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
相关资源
最近更新 更多