NestJS 9中创建MQTT微服务报错ECONNREFUSED 127.0.0.1:1883求助
NestJS 9 MQTT微服务连接失败问题排查与解决方案
错误原因
ERROR [Server] Error: connect ECONNREFUSED 127.0.0.1:1883 表示NestJS的MQTT客户端无法连接到指定地址的MQTT代理服务,核心问题是本地1883端口没有运行可用的MQTT Broker,常见诱因包括:
- 未安装MQTT Broker(如Mosquitto、EMQX)
- Broker未启动,或启动后未监听1883端口/localhost地址
- 系统防火墙、杀毒软件拦截了1883端口的TCP连接
- 代码中MQTT配置的地址/端口与实际Broker不匹配
解决方案
1. 安装并启动本地MQTT Broker(以Mosquitto为例)
- macOS:
brew install mosquitto brew services start mosquitto - Windows:
通过Chocolatey安装:
启动服务:在系统服务列表找到「Mosquitto Broker」并启动,或执行命令:choco install mosquittonet start mosquitto - Linux(Ubuntu/Debian):
sudo apt-get install mosquitto sudo systemctl start mosquitto - 验证:执行
mosquitto_sub -h localhost -t test,若命令无报错且保持运行,说明Broker已正常启动。
2. 检查Broker配置
打开Mosquitto的配置文件(通常路径:macOS/usr/local/etc/mosquitto/mosquitto.conf,WindowsC:\Program Files\mosquitto\mosquitto.conf),确认:
- 未注释
listener 1883(确保监听1883端口) - 未设置
bind_address为非localhost地址(本地连接保持默认即可)
修改后重启Broker服务。
3. 排查端口拦截
- 临时关闭系统防火墙,测试是否能正常连接,若恢复正常,需在防火墙中添加1883端口的允许规则。
- 检查杀毒软件,部分工具会拦截本地端口连接,可临时关闭或添加信任规则。
4. 修正代码配置
确保代码中的MQTT配置与Broker一致,若Broker有认证,需补充用户名密码:
async function bootstrap() { const app = await NestFactory.create(AppModule); app.connectMicroservice({ transport: Transport.MQTT, options: { url: 'mqtt://localhost:1883', // 匹配Broker地址和端口 clientId: 'test', // 可选:添加重连机制,避免单次连接失败直接崩溃 reconnectPeriod: 1000, // 若Broker开启认证,添加以下配置 // username: 'your-username', // password: 'your-password', }, }); console.log('cp1'); await app.startAllMicroservices(); console.log('cp2'); await app.listen(3000); console.log('Server ' + (await app.getUrl()) + ' is running'); }
5. 测试端口可用性
用以下命令验证1883端口是否开放:
# 使用telnet telnet localhost 1883 # 或使用nc nc -zv localhost 1883
若连接失败,说明端口无服务监听,回到步骤1-3重新排查。
内容的提问来源于stack exchange,提问作者Mikael
相关产品推荐
相关产品推荐

