是否可以将 MQTT 消息发送到事件中心?或者还有其他方法吗?

Is it possible to send MQTT message to Event Hub? Or is there another way?

我是 Azure、MQTT 和 IoT 的新手。我接到一项任务,要创建关于如何将 MQTT 消息发送到 Azure 事件中心的 POC。

然后从事件中心处理,将消息保存到云 sql 服务器。

这可能吗?由于我从 here 了解到,Azure 事件中心不支持 MQTT。或者有解决方法吗?或者有更好的方法吗?

目前我正在尝试研究 Azure 事件中心和 Azure IoT 中心。

请帮帮我。谢谢。

Azure 事件中心不支持 MQTT,只有 Azure 物联网中心支持。请参阅此处了解详细信息,以及如何使用或不使用 Microsoft SDKS 发送 MQTT 消息:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support

将消息发送到 IoT 中心后,您可以在 IoT 中心的 Event Hub-compatible endpoint 上使用它们。或者,如果您需要 "real" 事件中心中的数据,您可以使用路由将消息从 IoT 中心转发到事件中心。

您可以将 MQTT 消息发送到 IotHub。 IotHub 有一个与 EventHubs 兼容的默认端点。接下来,您可以创建一个带有 EventHubTrigger 的 AzureFunction 来处理消息。在该函数中,您可以从消息中提取数据并将其保存到 SQL 数据库。

或者,您可以使用 StreamAnalytics 将 IotHub 收到的消息保存到您的数据库中。 StreamAnalytics 比使用 AzureFunction 成本更高。

我在我的项目中做了一些相同的事情,并且我找到了这样做的方法。

正如其他答案已经提到的,您可以将 MQTT 消息发送到 IoT Hub,然后再发送到 EventHub,过程是,使用 Azure IoT SDK 为 IoT 设备开发应用程序,并使用 MQTT 协议将消息发送到 IoT中心。如果您想将您的物联网设备自动连接到物联网中心,您可以在此处使用设备预配服务,在这种情况下,您必须在应用程序代码中提供 DPS 连接信息,以便设备与 DPS 通信并获取物联网中心连接信息.您可以查找 https://docs.microsoft.com/en-us/azure/iot-dps/about-iot-dps

的文档

如果需要,您可以创建启用 Kafka 的事件中心实例,然后在其中创建 topic/event 中心。现在,您可以将所有 IoT 中心消息路由到该主题。优点是现在您可以构建一个应用程序,例如显示 IoT 设备生成的数据的仪表板,其数据源将是启用 Kafka 的 Event Hub 服务。 您可以在文档 https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-quickstart-kafka-enabled-event-hubs

中查看一个示例

Azure Function EventHub 触发器可以快速解决您的问题。 最初 IoT Hub 和 Event Hub 分别是客户端同心和机器对机器同心。一旦您想要大规模连接数千台设备,您必须使用 IoTHub 并将事件处理负载提供给 back-end 的 Event-Hub 层。 Here are the features of IoTHub and EventHub

因此,从设备获取 mqtt 消息到 EventHub 的最简单方法是利用 IoTHub 并使用包含 Event-Hub 触发器的 Azure 函数来获取 EventData。最后将该 EventData 注入到 Azure SQL 服务器。

您可以直接使用 sdk 或 azure iothub 访问 IoTHub MQTT API, 否则使用 MQTT Broker 作为 IoTHub 的桥梁。

第一步尝试使用 curl 命令直接访问 Azure IoTHub API。

发布示例

mosquitto_pub -d -q 1 --capath /etc/ssl/certs/ -V mqttv311 -p 8883 \
  -h iothub007.azure-devices.net \
  -i device0001 \
  -u "iothub007.azure-devices.net/device0001/api-version=2016-11-14" \
  -P "SharedAccessSignature sr=xxxx&skn=xxxx&sig=xxxx&se=xxxx" \
  -t "devices/device0001/messages/events/"
  -m '{"message":"howdy"}'

订阅示例

mosquitto_sub -d -q 1 --capath /etc/ssl/certs/ -V mqttv311 -p 8883 \
  -h iothub0007.azure-devices.net \
  -i device0001 \
  -u "iothub0007.azure-devices.net/device0001/api-version=2016-11-14" \
  -P "SharedAccessSignature sr=xxxx&skn=xxxx&sig=xxxx&se=xxxx" \
  -t "devices/device0001/messages/devicebound/#"

二期

您可以尝试使用 Azure IoT SDK 来完成与上述相同的操作。

如果第二步看起来很难,请尝试使用 MQTT 代理作为连接到 Azure IoT 中心的桥梁 (*)。 我建议使用 VerneMQ 或 Mosquitto。

目前 MS Azure IoT SDK 支持来自 SDK 的所有 MQTT、AMQP、HTTP。

参考代码: github