使用 simps/mqtt 调用阿里云的微消息队列 MQTT 版

简介: 微消息队列 MQTT 版 是专为移动互联网(MI)、物联网(IoT)领域设计的消息产品,覆盖互动直播、金融支付、智能餐饮、即时聊天、移动 Apps、智能设备、车联网等多种应用场景;通过对 MQTT、WebSocket 等协议的全面支持,连接端和云之间的双向通信,实现 C2C、C2B、B2C 等业务场景之间的消息通信,可支撑千万级设备与消息并发。

在阿里云的文档中 PHP 推荐的 SDK 是 Mosquitto-PHP ,这是一个基于回调和异步操作的 PHP MQTT 扩展,同时还依赖 libmosquitto

simps/mqtt 是纯 PHP 代码实现的协议解析,客户端实现基于 Swoole 的同步阻塞客户端和协程客户端,可以用于 PHP-FPM 和 CLI 两种模式。

并且 simps/mqtt 支持 MQTT 5.0 协议,是 PHP 首个支持 MQTT 5.0 协议的类库,后期如果阿里云的微消息队列 MQTT 版支持了 MQTT 5.0 协议,可以无缝升级。

以下为使用 simps/mqtt 来实现之前所提供的 Mosquitto-PHP 的示例代码

git clone https://github.com/simps-cloud/aliyun-mqtt.git
cd aliyun-mqtt
composer install
示例代码仅实现了测试逻辑,具体业务使用还需要进一步完善。
  • 配置文件
config.php
return [
    'access_key' => '', // 阿里云帐号 AccessKey
    'secret_key' => '', // 阿里云帐号 SecretKey
    'end_point' => '', // 接入点地址,购买实例后从控制台获取
    'instance_id' => '', // 实例 ID,购买后从控制台获取
    'topic' => '', // MQTT Topic,其中第一级 Topic 需要在 MQTT 控制台提前申请
    'group_id' => '', //  MQTT 客户端ID 前缀, GroupID,需要在 MQTT 控制台申请
];
• 单独使用 MQTT 消息收发示例
sendMessageToMQTT.php
include __DIR__ . '/vendor/autoload.php';
use Simps\MQTT\Client;
use Simps\MQTT\Config\ClientConfig;
use function Swoole\Coroutine\run;
run(function () {
    $config = require_once __DIR__ . '/config.php';
    // MQTT 客户端ID 后缀,DeviceId,业务方自由指定,需要保证全局唯一,禁止 2 个客户端连接使用同一个 ID
    $deviceId = Client::genClientID();
    $qos = 0;
    $port = 1883;
    $keepalive = 90;
    $cleanSession = true;
    $clientId = $config['group_id'] . '@@@' . $deviceId;
    echo "ClientId: {$clientId}", PHP_EOL;
    // 设置鉴权参数,参考 MQTT 客户端鉴权代码计算 username 和 password
    $username = 'Signature|' . $config['access_key'] . '|' . $config['instance_id'];
    $sigStr = hash_hmac("sha1", $clientId, $config['secret_key'], true);
    $password = base64_encode($sigStr);
    echo "UserName: {$username} \r\nPassword: {$password}", PHP_EOL;
    // 初始化客户端配置
    $clientConfig = new ClientConfig();
    $clientConfig->setUserName($username)
        ->setPassword($password)
        ->setClientId($clientId)
        ->setKeepAlive($keepalive)
        ->setMaxAttempts(0)
        ->setSwooleConfig([
            'open_mqtt_protocol' => true,
            'package_max_length' => 2 * 1024 * 1024,
        ]);
    try {
        // 初始化客户端
        $client = new Client($config['end_point'], $port, $clientConfig);
        $connect = $client->connect($cleanSession);
        // 连接状态
        var_dump($connect);
        $topics[$config['topic']] = $qos;
        $subStatus = $client->subscribe($topics);
        // 订阅状态
        var_dump($subStatus);
        $publishStatus = $client->publish($config['topic'], "Hello MQTT PHP Demo", $qos);
        // 发布状态
        var_dump($publishStatus);
        $buffer = $client->recv();
        // 订阅消息接收
        var_dump($buffer);
        echo 'Finished';
    } catch (\Throwable $e) {
        echo $e->getMessage();
    }
});
  • MQTT 签名示例

connectUseSignatureMode.php

  • MQTT Token 示例

connectUseTokenMode.php

  • MQTT 发送顺序消息 RocketMQ 订阅顺序消息示例

sendOrderMessage.php

  • P2P 消息收发模式

sendP2PMessageToMQTT.php

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
4月前
|
消息中间件 数据管理 Serverless
阿里云消息队列 Apache RocketMQ 创新论文入选顶会 ACM FSE 2025
阿里云消息团队基于 Apache RocketMQ 构建 Serverless 消息系统,适配多种主流消息协议(如 RabbitMQ、MQTT 和 Kafka),成功解决了传统中间件在可伸缩性、成本及元数据管理等方面的难题,并据此实现 ApsaraMQ 全系列产品 Serverless 化,助力企业提效降本。
|
2月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
218 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
6月前
|
物联网
(手把手)在华为云、阿里云搭建自己的物联网MQTT消息服务器,免费IOT平台
本文介绍如何在阿里云搭建自己的物联网MQTT消息服务器,并使用 “MQTT客户端调试工具”模拟MQTT设备,接入平台进行消息收发。
2442 42
|
5月前
|
消息中间件 存储 大数据
阿里云消息队列 Kafka 架构及典型应用场景
阿里云消息队列 Kafka 是一款基于 Apache Kafka 的分布式消息中间件,支持消息发布与订阅模型,满足微服务解耦、大数据处理及实时流数据分析需求。其通过存算分离架构优化成本与性能,提供基础版、标准版和专业版三种 Serverless 版本,分别适用于不同业务场景,最高 SLA 达 99.99%。阿里云 Kafka 还具备弹性扩容、多可用区部署、冷热数据缓存隔离等特性,并支持与 Flink、MaxCompute 等生态工具无缝集成,广泛应用于用户行为分析、数据入库等场景,显著提升数据处理效率与实时性。
|
消息中间件 存储 Serverless
【实践】快速学会使用阿里云消息队列RabbitMQ版
云消息队列 RabbitMQ 版是一款基于高可用分布式存储架构实现的 AMQP 0-9-1协议的消息产品。云消息队列 RabbitMQ 版兼容开源 RabbitMQ 客户端,解决开源各种稳定性痛点(例如消息堆积、脑裂等问题),同时具备高并发、分布式、灵活扩缩容等云消息服务优势。
335 2
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
840 97
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
358 106
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
|
消息中间件
解决方案 | 云消息队列RabbitMQ实践获奖名单公布!
云消息队列RabbitMQ实践获奖名单公布!
202 1
|
消息中间件 存储 弹性计算
云消息队列RabbitMQ实践
云消息队列RabbitMQ实践

相关产品

  • 云消息队列 MQ