Javascript 每当我在subscribe函数下连接到MOSQUITO MQTT时,被授予为空

Javascript 每当我在subscribe函数下连接到MOSQUITO MQTT时,被授予为空,javascript,node.js,mqtt,mosquitto,Javascript,Node.js,Mqtt,Mosquitto,下面是我的代码 mqtt_client.on('connect', (data) => { logger.info('Connack Packet', data); mqtt_client.subscribe([ env.topic.status, env.topic.error,], { qos: 1 }, (err, grant) => {

下面是我的代码

mqtt_client.on('connect', (data) => {
        logger.info('Connack Packet', data);
            mqtt_client.subscribe([
                env.topic.status,
                env.topic.error,], { qos: 1 }, (err, grant) => {
                    if (err) {
                        console.error('Failed to subscribe to a topic', err);
                        process.exit(1);
                    } else {
                        console.log('Subscribed Topics', grant);
                        let subscribedTopics = "";
                        for (let g of grant) {
                            subscribedTopics += g.topic + "\n";
                        }
                        console.info(`Waiting for messages on ${subscribedTopics}`);
                    }
                });
    });
所以,当我断开MOSQUITO连接并重新连接时,我得到的grant数组为空

以及为什么它只连接到旧会话而不连接到新会话

下面是我的配置

const options = { 
host: mqttConfigPointer.host, 
port: mqttConfigPointer.port, 
protocol: mqttConfigPointer.protocol, 
clean: false, 
clientId: CLIENTID, 
protocolId: MQTT, 
protocolVersion: 5, 
connectTimeout: 30000, 
keepalive: 60, 
rejectUnauthorized: false 
};

我在一个docker中运行Mosquito,在另一个docker中运行我的应用程序

所以,当我删除mosquitto docker并重新部署时,应用程序将连接,但无法接收任何消息,所以我必须重新启动应用程序docker,然后它将工作为什么会发生这种情况

虽然它是持久性客户机,但一旦我删除docker,它的所有db文件都会被删除,所以它仍然在存储和维护会话


我还检查了会话是否存在,如果存在,那么我不会订阅,因为您正在使用
cleanSession
设置为
false
您已经创建了一个持久会话。这意味着代理将记住,当您重新连接时,客户端(基于
clientID
)仍然订阅了这些主题

因此,订阅请求返回并清空授权列表,因为客户端已经订阅了这些主题

有关更多详细信息,请参阅本文:

包含用于连接的代码的问题,特别是如何设置
cleanSession
标志和clientId