RabbitMQ 使用哪些端口?

对于一组节点,RabbitMQ 服务器在防火墙上使用或需要打开哪些端口?

我的 /usr/lib/rabbitmq/bin/rabbitmq-env设置在下面,我假设需要(35197)。

SERVER_ERL_ARGS="+K true +A30 +P 1048576 \
-kernel inet_default_connect_options [{nodelay,true}] \
-kernel inet_dist_listen_min 35197 \
-kernel inet_dist_listen_max 35197"

我还没有触摸 rabbitmq.config来设置一个自定义的 tcp_listener,所以它应该是监听默认的5672。

下面是相关的 netstat 行:

tcp        0      0 0.0.0.0:4369           0.0.0.0:*           LISTEN      728/epmd
tcp        0      0 0.0.0.0:35197          0.0.0.0:*           LISTEN      5126/beam
tcp6       0      0 :::5672                :::*                LISTEN      5126/beam

我的问题是:

  1. 为了使其他节点能够连接到集群,是否需要打开所有3个端口4369、5672和35197?

  2. 为什么5672不在 tcp 上运行,而不只是在 tcp6上运行?

181420 次浏览

PORT 4369: Erlang 使用 PORT Mapper 守护进程(epmd)解析集群中的节点名。节点必须能够彼此连接,端口映射器守护进程才能进行集群工作。

35197号码头 由 inet _ dist _ listen _ min/max 设置的防火墙必须允许此范围内的流量在集群节点之间传递

RabbitMQ 管理控制台:

  • 端口15672,用于 RabbitMQ 版本3. x
  • 端口55672,用于 RabbitMQ pre 3. x

确保启用了 Rabbitmq _ management 插件,否则将无法访问这些端口上的管理控制台。

主要端口。

对于一个节点集群,它们必须在 3519743695672上彼此打开。

对于任何希望使用消息队列的服务器,只需要 5672

要查找 rabbitmq 使用的端口 :

$ epmd -names

产出:

epmd: up and running on port 4369 with data:
name rabbit at port 25672

以 root 用户身份运行它们:

lsof -i :4369
lsof -i :25672

更多关于 epmd 选项。

RabbitMQ 使用哪些端口?

默认值: 5672,手册中有答案。它在 RABBITMQ_NODE_PORT变量中定义。

Https://www.rabbitmq.com/configure.html#define-environment-variables

如果由 rabbitmq 配置文件中的某人更改,则数字可能会有所不同:

vi /etc/rabbitmq/rabbitmq-env.conf

询问 nmap 是否能看到它:

sudo nmap -p 1-65535 localhost


Starting Nmap 5.51 ( http://nmap.org ) at 2014-09-19 13:50 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00041s latency).
PORT      STATE         SERVICE
443/tcp   open          https
5672/tcp  open          amqp
15672/tcp open  unknown
35102/tcp open  unknown
59440/tcp open  unknown

看5672和15672

询问 netstat 是否能看到它:

netstat -lntu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address        State
tcp        0      0 0.0.0.0:15672               0.0.0.0:*              LISTEN
tcp        0      0 0.0.0.0:55672               0.0.0.0:*              LISTEN
tcp        0      0 :::5672                     :::*                   LISTEN

哦,看5672。

查看港口:

eric@dev ~$ sudo lsof -i | grep beam
beam.smp  21216    rabbitmq   17u  IPv4 33148214      0t0  TCP *:55672 (LISTEN)
beam.smp  21216    rabbitmq   18u  IPv4 33148219      0t0  TCP *:15672 (LISTEN)

使用不同机器上的 nmap,查看5672是否打开:

sudo nmap -p 5672 10.0.1.71
Starting Nmap 5.51 ( http://nmap.org ) at 2014-09-19 13:19 EDT
Nmap scan report for 10.0.1.71
Host is up (0.00011s latency).
PORT     STATE SERVICE
5672/tcp open  amqp
MAC Address: 0A:40:0E:8C:75:6C (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds

尝试用 telnet 手动连接到一个端口,5671是关闭的:

telnet localhost 5671
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

尝试用 telnet 手动连接到一个端口,5672是打开的:

telnet localhost 5672
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

检查你的防火墙:

sudo cat /etc/sysconfig/iptables

它应该告诉你哪些港口是开放的:

-A INPUT -p tcp -m tcp --dport 5672 -j ACCEPT

重新应用防火墙:

sudo service iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

进港通道

防火墙和其他安全工具可能会阻止 RabbitMQ 绑定到端口。当这种情况发生时,RabbitMQ 将无法启动。确保以下港口可以打开:

4369: epmd,RabbitMQ 节点和 CLI 工具使用的对等发现服务

5672,5671: AMQP 0-9-1和1.0客户机在没有和使用 TLS 的情况下使用

25672: 由爱尔朗分布用于节点间和 CLI 工具通信,并从动态范围分配(默认情况下限制为单个端口,计算为 AMQP 端口 + 20000)。有关详细信息,请参阅网络指南。

15672: HTTPAPI 客户端和 rabbitmqadmin (只有在启用了管理插件的情况下)

61613,61614: 没有和使用 TLS 的 STOMP 客户端(只有在启用了 STOMP 插件的情况下)

1883,8883: (如果启用了 MQTT 插件,没有和使用 TLS 的 MQTT 客户机

15674: STOMP-over-WebSockets 客户端(只有在启用了 Web STOMP 插件的情况下)

15675: MQTT-over-WebSockets 客户端(只有在启用了 Web MQTT 插件的情况下)

参考文献: Https://www.rabbitmq.com/install-windows-manual.html

检查 \AppData\Roaming\RabbitMQ\log。如果您有一个日志文件,那里搜索 started TCP listener on [::]

它应该会告诉您 RabbitMq 在哪个端口上运行。

免责声明: 不是找到端口的最佳方式,因为可能有一个机会,港口已在同一时间改变。