RabbitMQ作为Windows服务:rpc.erl上的badarith错误

我在使用RabbitMQ作为Windows服务时遇到了一些问题。

  • 操作系统:Windows 8(Microsoft Windows NT版本6.2服务器)(内部版本9200)
  • Erlang:R16B03(erts-5.10.4)
  • RabbitMQ:3.2.2

目标:使用三台服务器创build一个RabbitMQ群集:Srv1,Srv2,Srv3。

注意:我仔细地遵循了官方文档

以下所有操作都以“Administrator”用户身份执行。

第一个场景:从命令行启动RabbitMQ作为后台进程

我在Srv1上使用了“rabbitmq-server -detached”命令。 结果:在C:\ Users \ Administrator下创build了一个“.erlang.cookie”文件命令“rabbimqctl status”的执行成功,并给出了该节点的当前状态。 然后,我可以将文件.erlang.cookie复制到Srv2和Srv3上的同一文件夹中,并成功创build群集。

第二种情况:开始RabbitMQ服务(这是我的要求)

结果:文件“.erlang.cookie”在C:\ Windows下创build。 当我input命令“rabbitmqctl status”时,会在C:\ Users \ Administrator下创build另一个文件.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== 

我们知道这是正确的,因为这两个cookies是不同的。 因此,我将.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}]}]} 

请注意最后的错误:“badarith”在rpc.erl,第205行。我认为这个文件是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行是“案件适用(Mod,Fun,Args)的”

第三种情况:以命名用户身份启动RabbitMQ,以避免在C:\ Windows下创build.erlang.cookie文件

我将RabbitMQ服务设置为以“Administrator”用户身份login,这样它就不会在C:\ Windows下创build文件,而只能在C:\ User \ Administrator下创build该文件。 结果:服务启动时,仅在C:\ User \ Administrator下创build“.erlang.cookie”文件。 当我键入命令“rabbitmqctl状态”时,我得到了同样的错误,在案件(badarith …)。

现在的问题:我还没有find任何关于这个错误的信息(badarith)。 任何人都可以给我一个关于如何排除故障/避免这个问题的build议吗?