【发布时间】:2021-01-09 07:13:11
【问题描述】:
下面是我的代码
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}`);
}
});
});
所以当我断开 mosquitto 并且重新连接时,我的授权数组为空
以及为什么它只连接到旧会话而不是连接到新会话
下面是我的配置
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 中运行 mosquitto,在另一个 docker 中运行我的应用程序
所以当我删除 mosquitto docker 并重新部署时,应用程序将连接但无法接收任何消息,所以我也必须重新启动应用程序 docker 然后它才能工作,为什么会发生这种情况
虽然它是持久性客户端,但一旦我删除了 docker,它的所有 db 文件都被删除了,所以它仍然在存储和会话保持的位置
我还检查了会话是否存在,如果存在则我没有订阅所以
【问题讨论】:
-
Edit 包含用于连接的代码的问题,特别是您如何设置
cleanSession标志和 clientId
标签: javascript node.js mqtt mosquitto