首页 > 解决方案 > 面临通过rabbitmq(amqp协议)从云向设备iot hub发送消息的问题

问题描述

我想使用 amqp 协议将消息从云发送到设备 iot 集线器,为此我使用的是 rabbitmq 消息代理和 php 中的参考。我在 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 中的管道损坏或关闭连接

请帮帮我。

标签: phpazurerabbitmqazure-storageazure-iot-hub

解决方案


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

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

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

在这里阅读更多。

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


推荐阅读