面临通过rabbitmq(amqp协议)从云向设备iot hub发送消息的问题

Posted

技术标签:

【中文标题】面临通过rabbitmq(amqp协议)从云向设备iot hub发送消息的问题【英文标题】:Facing issue with sending message from cloud to device iot hub via rabbitmq(amqp protocol) 【发布时间】:2019-07-26 15:11:27 【问题描述】:

我想使用 amqp 协议将消息从云发送到设备 iot 集线器,为此我在 php 中使用带有 reference 的 rabbitmq 消息代理。我在 localhost 上尝试了以下代码:

//send.php
    <?php
        require_once __DIR__ . '/vendor/autoload.php';
    use PhpAmqpLib\Connection\AMQPStreamConnection;
    use PhpAmqpLib\Message\AMQPMessage;

    $connection = new AMQPStreamConnection('HUBNAME.azure-devices.net', 5671
    , 'HUBNAME.azure-devices.net/DEVICENAME/?api-version=2018-06-30'
    , 'SharedAccessSignature sr=HUBNAME.azure-devices.net
    &sig=XXXX&se=XXXX&skn=iothubowner');

    $channel = $connection->channel();
    $channel->queue_declare('hello', false, false, false, false);
    $json = '"id":123, "value":"xyz"';
    $msg = new AMQPMessage($json);
    $channel->basic_publish($msg, '', 'hello');    
    echo " [x] Sent 'Hello World!'\n";    
    $channel->close();
    $connection->close();

当我运行这个send.php 文件时出现错误:

致命错误:未捕获 PhpAmqpLib\Exception\AMQPConnectionClosedException:断管或 封闭连接 C:\xampp\htdocs\amqp\vendor\php-amqplib\php-amqplib\PhpAmqpLib\Wire\IO\StreamIO.php:222

请帮帮我。

【问题讨论】:

【参考方案1】:

您无法使用 rabbitmq 从您的 IotHub 发送云到设备消息。

" 您通过面向服务的端点 (/messages/devicebound) 发送云到设备的消息。然后,设备通过特定于设备的端点 (/devices/deviceId/messages/devicebound) 接收消息。

为了将每条云到设备的消息定位到单个设备,IoT 中心将 to 属性设置为 /devices/deviceId/messages/devicebound。 "

阅读更多here。

您可以\应该利用 Azure IoT 中心服务 SDK - 请参阅 here。

【讨论】:

谢谢,但是这个端点看起来像使用 https 协议,我读到对于 iot 消息传递避免协议 https 使用 amqp 或 mqtt,关于 sdk,我只能使用那里不可用的 php sdk,做你知道我该如何处理 amqp 从我的服务器向 iot hub 发送消息吗? 我很困惑,请澄清您是想从您的设备发送消息到 IoTHub (D2C) 还是从 IoTHub 发送消息到您的设备 (C2D)?谢谢 我不得不使用我的后端 PHP 来处理来自 IoT 中心的多个设备,为此我正在寻找 API 来命令 IoT 中心通过多个设备发送消息。通过上述方式,我能够处理单个设备,所以我得到了新的选项计划作业,这对我有用,我选择了正确的选项吗? 嗨 @BunkerBoy 确实,作业是 Azure IoTHub 上受支持的方案 - 作业在预定时间针对一组设备执行设备孪生更新和直接方法。

以上是关于面临通过rabbitmq(amqp协议)从云向设备iot hub发送消息的问题的主要内容,如果未能解决你的问题,请参考以下文章

AMQP协议和rabbitMQ

RabbitMQ AMQP (高级消息队列协议)

RabbitMQ学习

杂项之rabbitmq

RabbitMQ与AMQP协议

RabbitMQ