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