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

Laravel使用salmanzafar/laravel-mqtt订阅报Undefined index: qos错如何解决

错误原因

salmanzafar/laravel-mqtt v2.0版本的ConnectAndSubscribe方法对参数的校验逻辑存在缺失,当你直接将回调函数作为第二个参数传入时,方法内部不会自动补充默认的qos参数,导致组装回调数组时缺少qos键,进而抛出数组键不存在的错误。你直接修改vendor目录下的源码无法解决根本问题,一方面composer更新会覆盖修改,另一方面参数传递错误会导致后续订阅逻辑的参数解析依然异常。

正确解决步骤
  • 首先回退你对vendor/salmanzafar/laravel-mqtt/src/MqttClass/MqttService.php文件的所有修改,避免后续依赖更新出现冲突。
  • 调整业务调用代码,按照v2.0版本的API要求显式传入qos参数,共有两种合法调用方式:
    1. 单主题订阅,单独传入qos参数(qos可选值为0、1、2,无特殊需求默认填0即可)
    try {
        $mqtt = new Mqtt();
        // 第二参数指定qos,第三个参数传入回调函数
        $mqtt->ConnectAndSubscribe('myTopic', 0, function ($topic, $msg) {
               Log::info("Mqtt Msg Received");
        });
    } catch (\Exception $e) {
        dd($e->getMessage());
    }
    
    1. 批量多主题订阅,传入主题配置数组
    try {
        $mqtt = new Mqtt();
        $topicConfig = [
            'myTopic' => [
                'qos' => 0,
                'callback' => function ($topic, $msg) {
                    Log::info("Mqtt Msg Received");
                }
            ],
            // 可继续添加更多主题配置
        ];
        $mqtt->ConnectAndSubscribe($topicConfig);
    } catch (\Exception $e) {
        dd($e->getMessage());
    }
    
  • 若调整代码后订阅依然异常,先确认配置文件已正确发布:运行命令php artisan vendor:publish --provider="Salman\Mqtt\MqttServiceProvider",再检查config/mqtt.php中的MQTT服务器地址、端口、账号密码等配置是否和实际服务参数匹配。
兜底兼容方案

如果调整后依然存在兼容问题,可以降级安装更稳定的1.x版本,该版本的API和你原有调用方式完全兼容:

composer require salmanzafar/laravel-mqtt:^1.0

内容的提问来源于stack exchange,提问作者K.S.Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:54:03