通过RabbitMQ(AMQP协议)从云向设备IOT集线器发送消息时面临问题

时间:2019-03-05 07:59:58

标签: php azure rabbitmq azure-storage azure-iot-hub

我想使用amqp协议将消息从云发送到设备iot集线器,为此我正在将Rabbitmq消息代理与php中的reference一起使用。我在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 个答案:

答案 0 :(得分:0)

您无法使用Rabbitmq从IotHub发送“云到设备”消息。

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

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

了解更多here

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