AMQP Error: connect ECONNREFUSED ::1:5672 at TCPConnectWrap.afterConnect [as on

197 阅读2分钟

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: -61code"ECONNREFUSED"syscall"connect"address"::1"port5672, ...}

首先排查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