Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RabbitMQ作为Windows服务:rpc.erl上的badarith错误_Windows_Cookies_Service_Erlang_Rabbitmq - Fatal编程技术网

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

RabbitMQ作为Windows服务:rpc.erl上的badarith错误,windows,cookies,service,erlang,rabbitmq,Windows,Cookies,Service,Erlang,Rabbitmq,我在Windows上作为服务启动RabbitMQ时遇到一些问题 操作系统:Windows 8(Microsoft Windows NT 6.2版服务器) (构建9200) Erlang:R16B03(erts-5.10.4) RabbitMQ:3.2.2 目标:创建一个包含三台服务器的RabbitMQ集群:Srv1、Srv2、Srv3 注:我已仔细阅读了官方文件 以下所有操作均以用户“管理员”身份执行 第一个场景:从命令行作为后台进程启动RabbitMQ 我在Srv1上使用了命令“rabbi

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

  • 操作系统:Windows 8(Microsoft Windows NT 6.2版服务器) (构建9200)
  • Erlang:R16B03(erts-5.10.4)
  • RabbitMQ:3.2.2
目标:创建一个包含三台服务器的RabbitMQ集群:Srv1、Srv2、Srv3

注:我已仔细阅读了官方文件

以下所有操作均以用户“管理员”身份执行

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

我在Srv1上使用了命令“rabbitmq服务器-分离”。 结果:在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==
我们知道这没关系,因为这两种饼干是不同的。 因此,我将.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行是“案例捕获应用(Mod、Fun、Args)”

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

我将RabbitMQ服务设置为以用户“管理员”身份登录,这样它就不会在C:\Windows下创建文件,而只在C:\user\Administrator下创建文件。 结果:服务启动时,文件“.erlang.cookie”仅在C:\User\Administrator下创建。 当我键入命令“rabbitmqctl status”时,我得到与provious案例中相同的错误(badarith…)

现在的问题是:我没有找到有关此错误的任何信息(badarith)。
有谁能给我一个关于如何排除/避免这种情况的建议吗?

关于rabbitmq服务正在运行的“第二个场景”?如果在配置集群时移动了eralang.cookie文件,则可能会出现一些问题。尝试删除mnesia DB,然后重新加入群集节点。如果删除mnesia db,请小心,否则会丢失所有数据。您好,谢谢您的回答。我使用虚拟机:对于每个测试,我都从一个干净的环境开始。如果我丢失数据没有问题。所以在第二种情况下,我没有集群:我无法创建它。我在一台服务器上操作。情况是:1)在干净的服务器上重新安装RabbitMQ 2)启动RabbitMQ服务3)将cookie从C:\Windows复制到C:\Users\Administrator 4)等。我还尝试了:1)从C:\Users\Administrator复制到C:\Windows 2)编辑并保存具有相同内容的两个cookie 3)。。。顺便说一下:我真的很好奇“badarith”的错误。嗨,GADV,只是一个OT。。。。我注意到您使用的是Windows NT。你读过这个吗。它应该可以在Windows NT和Windows 2000上运行,尽管这还没有经过测试。嗨,Gas,谢谢你的回答。Windows 8是Windows NT系列操作系统的一部分;“WindowsNT6.2”只是它的“真名”。因此,我使用的是Windows 8而不是Windows NT。正如@Legocia指出的,错误是因为rabbit_vm:bytes使用错误的参数调用
*
。现在,当使用错误的参数调用mnesia:table_info(Tab,memory)时,它将返回
0
,例如不存在的表名:,这使得
erlang:system_info(wordsize)
成为罪魁祸首