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

时间:2014-04-24 17:37:59

标签: windows cookies service erlang rabbitmq

我遇到了RabbitMQ在Windows上作为服务启动的一些问题。

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

目标:创建一个包含三台服务器的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)。 任何人都可以给我一个关于如何解决/避免这种情况的建议吗?

0 个答案:

没有答案