You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 20:04:54