我遇到了RabbitMQ在Windows上作为服务启动的一些问题。
目标:创建一个包含三台服务器的RabbitMQ群集:Srv1,Srv2,Srv3。
注意:我已经仔细阅读了官方文档
以下用户“管理员”执行以下所有操作。
FIRST SCENARIO:从命令行启动RabbitMQ作为后台进程
我在Srv1上使用了命令“rabbitmq-server -detached”。 结果:在C:\ Users \ Administrator下创建了一个“.erlang.cookie”文件 执行命令“rabbimqctl status”成功并给出了节点的当前状态。 然后,我可以将文件.erlang.cookie复制到Srv2和Srv3上的同一文件夹中,并成功创建一个集群。
第二个场景:启动RabbitMQ作为服务(这是我的要求)
结果:文件“.erlang.cookie”在C:\ Windows下创建。 当我输入命令“rabbitmqctl status”时,在C:\ Users \ Administrator下创建另一个文件.erlang.cookie,我收到以下结果:
C:\Program Files\Aspect\DashBoard\RabbitMQ\sbin>rabbitmqctl.bat status
Status of node 'rabbit@RABBITMQ-NODE4' ...
Error: unable to connect to node 'rabbit@RABBITMQ-NODE4': nodedown
DIAGNOSTICS
===========
nodes in question: ['rabbit@RABBITMQ-NODE4']
hosts, their running nodes and ports:
- RABBITMQ-NODE4: [{rabbit,49428},{rabbitmqctl3045334,49434}]
current node details:
- node name: 'rabbitmqctl3045334@rabbitmq-node4'
- home dir: C:\Users\Administrator
- cookie hash: 0DLAKf8pOVrGC016+6BDBw==
我们知道这是可以的,因为两个cookie是不同的。 所以我将.erlang.cookie文件从C:\ Windows复制到C:\ Users \ Administrator中,然后我再次尝试相同的命令。这次我得到:
C:\Program Files\Aspect\DashBoard\RabbitMQ\sbin>rabbitmqctl.bat status
Status of node 'rabbit@RABBITMQ-NODE4' ...
Error: unable to connect to node 'rabbit@RABBITMQ-NODE4': nodedown
DIAGNOSTICS
===========
nodes in question: ['rabbit@RABBITMQ-NODE4']
hosts, their running nodes and ports:
- RABBITMQ-NODE4: [{rabbitmqctl1178095,49471}]
current node details:
- node name: 'rabbitmqctl1178095@rabbitmq-node4'
- home dir: C:\Users\Administrator
- cookie hash: TIuqp21HOQSoUJT8JfgRQw==
C:\Program Files\Aspect\DashBoard\RabbitMQ\sbin>rabbitmqctl.bat status
Status of node 'rabbit@RABBITMQ-NODE4' ...
Error: {badarith,[{rabbit_vm,bytes,1,[]},
{rabbit_vm,'-mnesia_memory/0-lc$^0/1-0-',1,[]},
{rabbit_vm,mnesia_memory,0,[]},
{rabbit_vm,memory,0,[]},
{rabbit,status,0,[]},
{rpc,'-handle_call_call/6-fun-0-',5,
[{file,"rpc.erl"},{line,205}]}]}
请注意最后的错误:rpc.erl第205行中的“badarith”。 我认为该文件是Erlang \ lib \ kernel-2.16.4 \ src \ rpc.erl 功能就是这个:
handle_call_call(Mod, Fun, Args, Gleader, To, S) ->
RpcServer = self(),
%% Spawn not to block the rpc server.
{Caller,_} =
erlang:spawn_monitor(
fun () ->
set_group_leader(Gleader),
Reply =
%% in case some sucker rex'es
%% something that throws
case catch apply(Mod, Fun, Args) of
{'EXIT', _} = Exit ->
{badrpc, Exit};
Result ->
Result
end,
RpcServer ! {self(), {reply, Reply}}
end),
{noreply, gb_trees:insert(Caller, To, S)}.
和第205行是'case catch apply(Mod,Fun,Args)'
第三个场景:启动RabbitMQ作为命名用户,以避免它在C:\ Windows 下创建文件.erlang.cookie
我将RabbitMQ服务设置为以“Administrator”用户身份登录,这样它就不会在C:\ Windows下创建文件,而只能在C:\ User \ Administrator下创建。 结果:服务启动时,仅在C:\ User \ Administrator下创建文件“.erlang.cookie”。 当我输入命令“rabbitmqctl status”时,我得到了同样的错误(badarith ......)。
现在问题:我还没有找到任何有关此错误的信息(badarith)。 任何人都可以给我一个关于如何解决/避免这种情况的建议吗?