只要客户端设置 sessionExpiryInterval 为 0xffffffff 后客户端收不到消息
使用 mqttx 配置一不设置 sessionExpiryInterval 可以正确发送
使用 mqttx 配置二设置 sessionExpiryInterval 为 4294967295 后,配置一发送任何消息,配置二都收不到
两个都监听了 # 使用任意语言 mqtt 客户端实现只有 sessionExpiryInterval 为 0 的情况下可以获取消息
只要客户端设置 sessionExpiryInterval 为 0xffffffff 后客户端收不到消息
使用 mqttx 配置一不设置 sessionExpiryInterval 可以正确发送
使用 mqttx 配置二设置 sessionExpiryInterval 为 4294967295 后,配置一发送任何消息,配置二都收不到
两个都监听了 # 使用任意语言 mqtt 客户端实现只有 sessionExpiryInterval 为 0 的情况下可以获取消息
看视频中使用一样的账号,一样的代码除了 sessionExpiryInterval 不同,订阅也是同一个,一个可以收到,一个不行,这也会是订阅 / acl 问题吗?
先用 Trace 功能把这几个 clientid 的消息交换流程抓一下
另外还请分享下 authn/authz (认证/鉴权) 的配置
c01.zip (2.6 KB)
c02.zip (3.5 KB)
c03.zip (3.3 KB)
c01: 是收不到消息的 sessionExpiryInterval 为 0xffffffff
c02: 是收到消息的 sessionExpiryInterval 为 0
c03: 是发送消息的收不到消息,可以收到 $SYS 开头的 sessionExpiryInterval 为 1
c01 与 c02 的连接配置一致除了 sessionExpiryInterval 和 clientId 以外
"clean": true,
"reconnectPeriod": 1000,
"connectTimeout": 30000,
"resubscribe": true,
"keepalive": 3,
"protocolVersion": 5,
"rejectUnauthorized": true,
"manualConnect": true,
c03 是 mqttx 客户端
c01 和 c02 的代码
const mqtt = require('mqtt');
const connection = {
"host": "192.168.0.254",
"port": 1883,
"username": "xxxxx",
"password": "xxxxx",
}
const client = mqtt.connect({
...connection,
"clean": true,
"reconnectPeriod": 1000,
"connectTimeout": 30000,
"resubscribe": true,
"keepalive": 3,
"protocolVersion": 5,
"rejectUnauthorized": true,
"properties": {
"sessionExpiryInterval": 0xffffffff, // 这里有差异
},
"manualConnect": true,
"clientId": "MQTT:START" // 这里有差异
});
client.on('disconnect', (packet) => {
console.log('disconnect', packet)
})
client.on('connect', () => {
console.log('connected');
client.subscribe({
'put/+/+':{
qos:2
}
});
});
client.on('message', (topic, message) => {
console.log(topic, message.toString());
});
client.on('error', (err) => {
console.log(err);
});
client.connect();
acl 配置
hi
检查并对比了几个 trace log 中的信息
c01.zip 中的日志显示它确实没有订阅到
msg: subscribe
为最关键的一条日志,有这条日志才能表明客户端的订阅请求被正确处理
还请补充一些关键信息来精确定位问题:
SessionExpiryInterval 设置为 0xFFFFFFFF 并不会影响客户端的订阅行为:
还需要提供什么信息吗?