You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS PHP SDK已实现IoT消息发布,如何订阅主题获取设备响应

AWS IoT Core 采用异步 Pub/Sub 架构,你当前调用的 publish 接口仅负责消息下发,本身不会同步返回设备响应,retain 消息机制也确实仅存储服务端发布的最新消息,不会存储设备侧返回的内容,你可以参考以下几种方案实现设备响应的接收:

方案1:MQTT 客户端订阅主题(实时接收响应)

PHP 原生 HTTP 场景是同步阻塞的,该方案需要搭配常驻进程使用(可配合 Laravel 自定义命令 + Supervisor 做进程守护),推荐使用 php-mqtt/client 依赖实现 MQTT 订阅:

  • 第一步安装依赖:
composer require php-mqtt/client
  • 订阅示例代码:
use PhpMqtt\Client\MqttClient;
use PhpMqtt\Client\ConnectionSettings;

// 替换为你的AWS IoT对应配置
$iotEndpoint = 'xxx-ats.iot.你的区域.amazonaws.com';
$port = 8883;
$clientId = 'laravel-service-' . uniqid();

$connectionSettings = (new ConnectionSettings)
    ->setUseTls(true)
    ->setTlsClientCertificateFile('/path/to/your/certificate.pem.crt')
    ->setTlsClientKeyFile('/path/to/your/private.pem.key')
    ->setTlsCAFile('/path/to/AmazonRootCA1.pem');

$mqttClient = new MqttClient($iotEndpoint, $port, $clientId);
$mqttClient->connect($connectionSettings);

// 订阅设备响应主题,可按业务规则自定义主题格式,比如 device/response/{设备ID}
$mqttClient->subscribe('device/response/+', function (string $topic, string $payload) {
    // 此处可直接处理设备返回的响应内容
    $responseData = json_decode($payload, true);
    // 后续业务逻辑,比如存库、触发事件等
}, 1);

// 保持进程常驻监听消息
$mqttClient->loop(true);

方案2:设备影子(Device Shadow)查询(非实时场景)

如果不需要实时推送,仅需要获取设备最新上报的状态,可以直接调用 IoT 设备影子接口查询,不需要维护长连接:

$iotClient = \AWS::createClient('iot');
$shadowResult = $iotClient->getThingShadow([
    'thingName' => '你的设备名称', // 必填
]);
$shadowData = json_decode($shadowResult['payload'], true);
// 设备主动上报的响应内容存储在 reported 字段中
$deviceResponse = $shadowData['state']['reported'];

只需要让设备收到服务端下发的消息后,把响应内容更新到自身影子的 reported 字段即可。

方案3:规则引擎转存(无需维护长连接)

你可以在 AWS IoT 控制台配置规则,把设备上报响应的主题消息自动转发到 SQS 队列、DynamoDB 或者 Lambda 函数,服务端直接消费对应服务的内容即可,无需自己维护 MQTT 长连接,稳定性更高。

补充说明

如果需要在同步 HTTP 接口中实现下发消息后等待设备响应返回,可以自定义请求ID规则:下发消息时携带唯一请求ID,设备响应时带回同一个请求ID,服务端用缓存暂存请求ID的等待状态,消费到对应响应后再返回给前端接口即可。

内容的提问来源于stack exchange,提问作者roy naufal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:30:03