是否可以将MQTT消息发送到事件中心?还是有另一种方法?

时间:2019-05-17 03:29:28

标签: azure mqtt iot azure-iot-hub azure-eventhub

我是Azure,MQTT和IoT的新手。我已获得一项任务,以创建有关如何将MQTT消息发送到Azure事件中心的POC。

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

这可能吗?由于我从here阅读,因此该Azure Event Hub不支持MQTT。还是有解决方法?还是有更好的方法来做到这一点?

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

请帮助我。谢谢。

4 个答案:

答案 0 :(得分:2)

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

一旦您将消息发送到IoT中心,就可以在IoT中心的Event Hub-compatible endpoint上使用它们。或者,如果您需要“真实的”事件中心中的数据,则可以使用路由将消息从IoT中心转发到事件中心。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

的文档

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

中看到一个示例

答案 3 :(得分:-1)

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

因此,将mqtt消息从设备发送到EventHub的最简单方法是利用IoTHub并采用由Event-Hub触发器组成的Azure函数来获取EventData。最后将EventData注入Azure SQL Server。

您可以使用sdk或azure iothub API直接访问IoTHub MQTT, 否则,使用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