我正在尝试安装rabbitmq.erlang即OTP 18.1文件的安装已成功完成,并且rabbitmq安装也成功完成.但是当我尝试连接rabbitmq时,我收到以下错误:
C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.5.6\sbin>rabbitmq-plugins.bat enable rabbitmq_management
Plugin configuration unchanged.
Applying plugin configuration to rabbit@INLN50899724A... failed.
* Could not contact node rabbit@INLN50899724A.
Changes will take effect at broker restart.
* Options: --online - fail if broker cannot be contacted.
--offline - do not try to contact broker.
C:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.5.6\sbin>rabbitmq-server restart
ERROR: epmd error for host INLN50899724A: address (cannot connect to host/port)
Run Code Online (Sandbox Code Playgroud)
点击下面查看包含错误错误Empd Rabbitmq的图像
如果erlang服务器尚未运行,它将自动生成epmd(Erlang端口映射器守护程序).我更愿意使用systemd作为单独的服务来管理epmd.这样,如果我在一个主机上运行多个Erlang服务器(例如RabbitMQ和ejabberd),如果自动生成epmd的服务器关闭,epmd将不会消失.systemd将在服务关闭时清理任何杂散进程,因此自动生成的epmd将无法生存.
我可以通过在启动任何Erlang服务器之前确保epmd作为单独的服务运行来解决这个问题,但我想确保epmd仅作为单独的服务运行.
有谁知道如何设置 RabbitMQ 以便 epmd.exe 与 RabbitMQ 服务一起关闭?
这篇文章似乎表明这是不可能的:Is there a way to stop Erlangservers fromautomatic running epmd?
换句话说,可能有一个机制用 -daemon 开关启动它,我想摆脱它。
我有一个运行在Docker容器中的Elixir应用程序(在我的笔记本电脑中)。Elixir应用程序使用以下命令执行:
iex \
--name test@1.2.3.4 \
--cookie secret \
--erl '-kernel inet_dist_listen_min 9000' \
--erl '-kernel inet_dist_listen_max 9000' \
-S mix phx.server
Run Code Online (Sandbox Code Playgroud)
Docker容器公开以下端口:
0.0.0.0:4000->4000/tcp, 0.0.0.0:4369->4369/tcp, 0.0.0.0:9000->9000/tcp
然后,我尝试使用以下命令使用IEx Shell进行连接:
iex --name local@127.0.0.1 --cookie secret 导致此错误:
Protocol 'inet_tcp': register/listen error: epmd_close
这似乎是因为本地epmd守护程序正试图分配给端口4369,但是,这已经分配给了Docker容器。
然后,我像这样更改了EPMD端口:
ERL_EPMD_PORT=4370 iex --name local@127.0.0.1 --cookie secret
我设法打开了IEx会话。但是,我找不到在Docker容器上运行的节点:
iex(local@127.0.0.1)1> Node.connect :'test@1.2.3.4'
false
Run Code Online (Sandbox Code Playgroud)
我不确定该如何解决。我正在关注此博客文章。
我在同一台服务器上有一个生产和登台网站,我希望他们每个人都使用单独的RabbitMQ实例。我正在使用一个RabbitMQ安装,并且正在运行两个RabbitMQ实例,其中两个RabbitMQ实例均设置为通过环境变量使用不同的配置。
在此设置中,两个RabbitMQ实例可以共享相同的epmd进程吗?还是在两个不同的端口上运行两个epmd进程更好,以便将分段和生产的基础结构完全分开?
在两个远程节点之间发送消息时。
erlang:send 是否像 epmd 那样使用单个端口?
epmd ×6
erlang ×4
rabbitmq ×3
daemon ×1
docker ×1
elixir ×1
networking ×1
rabbitmqctl ×1
rpc ×1
systemd ×1