Mac下nodejs连接rabbitmq报了错误,以下是错误详情:
AMQP
Error: connect ECONNREFUSED ::1:5672 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16) at TCPConnectWrap.callbackTrampoline (node:internal/async_hooks:130:17) {errno: -61, code: "ECONNREFUSED", syscall: "connect", address: "::1", port: 5672, ...}
首先排查rabbitmq是否启动,5672端口是否正常监听
rabbitmqctl status
....
Listeners
Interface: [::], port: 15672, protocol: http, purpose: HTTP API
Interface: [::], port: 61613, protocol: stomp, purpose: STOMP
Interface: [::], port: 5552, protocol: stream, purpose: stream
Interface: [::], port: 1883, protocol: mqtt, purpose: MQTT
Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Interface: 127.0.0.1, port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
lsof -i:5672
COMMAND PID USER FD TYP SIZE/OFF NODE NAME
beam.smp 16873 apple 62u IPv4 0t0 TCP localhost:amqp (LISTEN)
确认rabbitmq正确启动了,看到配置文件
{
...
amqp: {
hostname: 'localhost',
username: 'guest',
password: 'guest',
vhost: '/',
exchange: 'dev',
},
...
}
将localhost改成了127.0.0.1,成功解决了。coze上查了一下localhost、127.0.0.1和0:0:0:0:0:0:0:1的区别:
"localhost", "127.0.0.1" 和 "0:0:0:0:0:0:0:1" 都是用来表示本机的特殊IP地址。"localhost" 是一个特殊的主机名,它总是指向本机。它的实际IP地址通常是 "127.0.0.1" 或 "::1"。这个映射通常在操作系统的 hosts 文件中定义。
"127.0.0.1" 是 IPv4 网络协议中用于表示本机的特殊IP地址。它是所谓的 "loopback" 地址,任何发送到这个地址的数据包都会返回到发送者。
"0:0:0:0:0:0:0:1" 或 "::1" 是 IPv6 网络协议中用于表示本机的特殊IP地址。就像 "127.0.0.1" 一样,它也是一个 "loopback" 地址。
总的来说,这三个地址都可以用来在本机上测试网络应用,而不需要连接到外部网络。这对于开发和调试应用非常有用。
vim host文件,看到后面多了一行localhost的映射,不知道那个应用改的,去掉了,没有问题了。
sudo vi /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost