设备如何在 IoT 中心接收直接方法?

How Device receives Direct Methods in the IoT Hub?

根据 IoT 中心中直接方法的文档,指出用户通过面向服务的 URI 调用直接方法 "{iot hub}/twins/{device id }/methods/" 并且设备在 MQTT 主题 "$iothub/methods/POST/{method name}/" 上收到它
我对这个映射的工作原理有些困惑。
IoT 中心是否有任何内部映射将请求重定向到特定设备?
其他设备如何识别该方法不适用于他们,因为设备正在侦听的主题似乎不是特定于设备的,我们只需要一个特定的设备来接收该方法调用?

当设备通过 IoT 中心进行身份验证时,它会包含其设备 ID。参见:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support#using-the-mqtt-protocol-directly

IoT 中心随后可以确保设备接收到正确的直接方法调用。

即使多个直接方法具有相同的名称,每个直接方法都针对一个设备。只有目标设备可以接收该方法。

所以请随意测试和使用它。

Azure IoT Hub 是设备和云(IoT 堆栈)之间的双向集成网关。它的主要目标是通过默认(内置)或自定义端点将设备遥测数据快速摄取到云流管道。

基本上,Azure IoT 中心有两种端点,例如面向设备的端点和面向服务的端点。 有关这些端点的更多详细信息 here

在内部,Azure IoT Hub 不是面向总线的,它不是通用的 MQTT Broker,它不是通用的通信代理,它是一个具有点对点星形拓扑通信的集成网关,例如 Device-到云 (D2C) 和云到设备 (C2D) 消息传递。没有直接的设备到设备消息传递。

C2D 消息传递有一些限制,请参阅 IoT Hub quotas and throttling。 C2D 消息传递可以使用设备孪生功能以异步或同步方式进行。

基本上,C2D消息传递是基于点对点的星型通信,换句话说,你不能向设备发送多播广播消息。在这种情况下,推荐的方法是创建一个作业来一个一个地向设备发送消息。

通过 Azure IoT 中心在设备上调用直接方法只能通过使用 Http 协议的面向服务的端点。在另一端(例如面向设备的端点),它只能由具有面向连接的协议(例如 MQTT 或 AMQP)的设备使用。

面向设备的端点支持 MQTT v3.1.1 通信协议,查看更多详细信息here

要使用 Azure IoT Hub 评估 MQTT 设备的行为,可以使用 MQTTBox Client、https://iotdevtool.com, Azure IoT Hub Tester 等第 3 方工具来完成。

以下屏幕片段显示了在 MQTT 设备上调用直接方法。请注意 Azure IoT 中心测试器使用直接 MQTT 协议与 Azure IoT 中心。

第 1 步:在面向服务的端点 (Http) 上调用直接方法。请注意,url 地址具有目标设备 ID(在此测试中为 Device10)。

第2步:设备(Device10)收到直接方法

第 3 步:设备 (Device10) 将响应发送回调用者

第4步:调用者在超时限制内收到了来自Device10的响应