如何在Node.js中使用mqtt模块实现Amazon MQ主备故障转移?
Node.js中使用mqtt模块实现Amazon MQ主备故障转移
你可以通过两种方式实现故障转移,以下是具体操作:
方式一:直接使用故障转移URL字符串
直接把你拿到的故障转移字符串作为mqtt.connect的第一个参数传入,同时带上认证等配置项:
const mqtt = require('mqtt'); const username = '你的用户名'; const password = '你的密码'; const failoverUrl = 'failover:(mqtt+ssl://b-e788a351-ba0b-382f-85f4-8b54bdb4e405-1.mq.us-east.amazonaws.com:8883,mqtt+ssl://b-e788a351-ba0b-382f-85f4-8b54bdb4e405-2.mq.us-east.amazonaws.com:8883)'; const mqttOptions = { clientId: username, keepalive: 60, username, password, rejectUnauthorized: true }; const client = mqtt.connect(failoverUrl, mqttOptions);
方式二:使用options中的servers数组
你之前的思路是对的,但错误在于给mqtt.connect传了多余的host参数。当使用servers数组时,connect方法不需要传入第一个URL参数,直接把配置放在options里即可:
const mqtt = require('mqtt'); const username = '你的用户名'; const password = '你的密码'; const mqttOptions = { clientId: username, keepalive: 60, username, password, rejectUnauthorized: true, servers: [ { protocol: 'mqtts', host: 'b-e788a351-ba0b-382f-85f4-8b54bdb4e405-1.mq.us-east.amazonaws.com', port: 8883 }, { protocol: 'mqtts', host: 'b-e788a351-ba0b-382f-85f4-8b54bdb4e405-2.mq.us-east.amazonaws.com', port: 8883 } ] }; // 不需要传入第一个host参数 const client = mqtt.connect(mqttOptions);
验证故障转移效果
可以监听客户端的相关事件,确认故障转移逻辑是否正常触发:
client.on('connect', () => { console.log('成功连接到Broker'); }); client.on('offline', () => { console.log('当前Broker连接断开,触发故障转移'); }); client.on('reconnect', () => { console.log('正在尝试重新连接到备用Broker'); });
内容的提问来源于stack exchange,提问作者Sachin Pundir
相关产品推荐
相关产品推荐

