当前位置: 首页 > backend >正文

Laravel 12 基于 EMQX 实现 MQTT 消息发送与接收

Laravel 12 基于 EMQX 实现 MQTT 消息发送与接收

要在 Laravel 12 中实现基于 EMQX 的 MQTT 消息发送与接收,你可以按照以下步骤操作:

1. 安装必要的依赖包

首先安装 MQTT 客户端库:

composer require php-mqtt/client

2. 配置 EMQX 连接

.env 文件中添加 EMQX 连接配置:

MQTT_HOST=your_emqx_server_address
MQTT_PORT=1883
MQTT_CLIENT_ID=laravel_mqtt_client
MQTT_USERNAME=your_username
MQTT_PASSWORD=your_password
MQTT_KEEPALIVE=60
MQTT_CLEAN_SESSION=true

3. 创建 MQTT 服务类

创建 app/Services/MqttService.php

<?phpnamespace App\Services;use PhpMqtt\Client\MqttClient;
use PhpMqtt\Client\ConnectionSettings;class MqttService
{protected $client;public function __construct(){$host = env('MQTT_HOST');$port = env('MQTT_PORT');$clientId = env('MQTT_CLIENT_ID');$this->client = new MqttClient($host, $port, $clientId);}public function connect(){$connectionSettings = (new ConnectionSettings)->setUsername(env('MQTT_USERNAME'))->setPassword(env('MQTT_PASSWORD'))->setKeepAliveInterval(env('MQTT_KEEPALIVE'))->setCleanSession(env('MQTT_CLEAN_SESSION'));$this->client->connect($connectionSettings, true);return $this;}public function publish($topic, $message){$this->client->publish($topic, $message);return $this;}public function subscribe($topic, callable $callback){$this->client->subscribe($topic, $callback);return $this;}public function disconnect(){$this->client->disconnect();}public function loop(){$this->client->loop(true);}
}

4. 创建 MQTT 命令

创建订阅消息的命令:

php artisan make:command SubscribeMqtt

编辑 app/Console/Commands/SubscribeMqtt.php

<?phpnamespace App\Console\Commands;use Illuminate\Console\Command;
use App\Services\MqttService;class SubscribeMqtt extends Command
{protected $signature = 'mqtt:subscribe {topic}';protected $description = 'Subscribe to MQTT topic';public function handle(){$topic = $this->argument('topic');$mqtt = new MqttService();$mqtt->connect();$mqtt->subscribe($topic, function ($topic, $message) {$this->info("Received message on topic [{$topic}]: {$message}");// 在这里处理接收到的消息});$mqtt->loop();}
}

5. 使用 MQTT 服务

发送消息

在控制器或其他地方发送消息:

use App\Services\MqttService;// 发送消息
$mqtt = new MqttService();
$mqtt->connect()->publish('test/topic', 'Hello from Laravel')->disconnect();

接收消息

启动订阅命令:

php artisan mqtt:subscribe test/topic

6. 高级用法

使用队列处理接收的消息

修改订阅命令的回调:

$mqtt->subscribe($topic, function ($topic, $message) {\App\Jobs\ProcessMqttMessage::dispatch($topic, $message);
});

然后创建对应的队列任务:

php artisan make:job ProcessMqttMessage

使用事件系统

创建 MQTT 消息事件:

php artisan make:event MqttMessageReceived

然后在订阅回调中触发事件:

$mqtt->subscribe($topic, function ($topic, $message) {event(new \App\Events\MqttMessageReceived($topic, $message));
});

7. 安全性考虑

  1. 使用 TLS/SSL 加密连接(EMQX 默认支持)
  2. 在 EMQX 中设置 ACL 规则限制客户端权限
  3. 使用认证插件(如 JWT、MySQL、Redis 认证)

8. 部署建议

  1. 使用 Supervisor 管理订阅进程
  2. 考虑使用 EMQX 集群提高可用性
  3. 监控 EMQX 和 Laravel 应用的资源使用情况
http://www.xdnf.cn/news/4213.html

相关文章:

  • 电商数据接口开发进阶:京东 API 实时商品信息采集技术解析​
  • 通过 ModernBERT 实现零样本分类的性能提升
  • Nginx 安全防护与HTTPS部署
  • Super VLAN配置
  • Ubuntu 系统中解决 Firefox 中文显示乱码的完整指南
  • 荣耀A8互动娱乐组件部署实录(第3部分:控制端结构与房间通信协议)
  • 机器学习例题——预测facebook签到位置(K近邻算法)和葡萄酒质量预测(线性回归)
  • 数字传播生态中开源链动模式与智能技术协同驱动的品牌认知重构研究——基于“开源链动2+1模式+AI智能名片+S2B2C商城小程序”的场景化传播实践
  • IdeaVim配置指南
  • 【Linux】Linux中的调度和切换
  • 开源智能体MetaGPT记忆模块解读
  • 【大数据】服务器上部署Apache Paimon
  • 基于k8s的Jenkins CI/CD平台部署实践(三):集成ArgoCD实现持续部署
  • 高铁座位指示灯系统技术深度解析:从物联网到智慧出行的实践路径
  • idea使用lombok错误,找不到符号,明明编译没问题,运行报错
  • The 2023 ICPC Asia Taoyuan Regional Programming Contest
  • 13.Spring boot中使用Actuator 监控
  • 深入了解linux系统—— 进程地址空间
  • CVE-2025-24813:Apache Tomcat RCE 漏洞分析
  • 拟南芥T2T基因组-文献精读127
  • Github上如何准确地搜索开源项目
  • 高等数学第四章---不定积分(4.4有理函数的不定积分2)
  • Elasticsearch:我们如何在全球范围内实现支付基础设施的现代化?
  • 甲骨文云服务器技术全景解析:从基础架构到行业赋能​
  • 从0开始学习大模型--Day2--大模型的工作流程以及初始Agent
  • NLP 和大模型技术路线
  • 51单片机同一个timer 作为定时器和波特率发生器么?
  • AutoDL+SSH在vscode中远程使用GPU训练深度学习模型
  • 临床智能体AI与环境感知AI的融合:基于python的医疗自然语言处理深度分析
  • 荣耀A8互动娱乐组件部署实录(第2部分:界面逻辑与资源加载机制)