RabbitMQ Shovel插件停留在“启动”状态

时间:2012-07-12 00:00:51

标签: rabbitmq

RabbitMQ启动就好了,但是铲子插件状态被列为“开始”。

我正在使用以下rabbitmq.config:

每个代理都在单独的AWS实例上运行。远程服务器是windows 2008服务器,本地服务器是Amazon Linux。

[{rabbitmq_shovel,
  [{shovels,
    [{scrape_request_shovel,
      [{sources,      [{broker,"amqp://test_user:test_password@localhost"}]},
       {destinations, [{broker, "amqp://test_user:test_password@ec2-###-##-###-###.compute-1.amazonaws.com"}]},
       {queue, <<"scp_request">>},
       {ack_mode, on_confirm},
       {publish_properties, [{delivery_mode, 2}]},
       {publish_fields, [{exchange, <<"">>},
                         {routing_key, <<"scp_request">>}]},
       {reconnect_delay, 5}
       ]}
      ]
   }]
}].

运行以下命令:

  

sudo rabbitmqctl eval'habit_shovel_status:status()。'

返回:

  

[{scrape_request_shovel,启动,{{2012,7,11},{23,38,47}}}]

根据This question,如果未在两个代理上正确设置用户,则可能会导致此问题。但是,我已经仔细检查过我已经在两台机器上通过rabbitmqctl user_add正确设置了用户 - 甚至可以尝试使用不同的用户集。

我还在远程主机上运行了端口5672的nmap扫描,以验证该端口是否已启动并运行。

更新 问题未解决,但这似乎是远程服务器连接问题的结果。我在配置文件中将“reconnect_delay”更改为0,以避免铲子无限次重新尝试连接。强烈推荐其他有这个问题的人这样做,因为它允许你从rabbit_shovel_status中获取错误信息。在我的情况下,我得到以下错误:

[{scrape_request_shovel,
    {terminated,
        {{badmatch,{error,access_refused}},
         [{rabbit_shovel_worker,make_conn_and_chan,1},
          {rabbit_shovel_worker,handle_cast,2},
          {gen_server2,handle_msg,2},
          {proc_lib,init_p_do_apply,3}]}},
    {{2012,7,12},{0,4,37}}}]

1 个答案:

答案 0 :(得分:5)

在这里回答我自己的问题,以防其他人遇到这个问题。这个错误(如果你得到它也会出现超时错误,{{badmatch,{error,etimedout}},),这几乎肯定是两台机器之间的通信问题,很可能是由于端口访问/防火墙设置。

我在这里做了几件蠢事:

1)我的远程EC2实例使用了错误的DNS(D'哦!真的很笨 - 不能告诉你我花了多长时间撞在墙上的这个......)。请记住,如果您没有与实例关联的弹性IP,则停止和启动实例会生成新的DNS。

2)我的远程实例是一个Windows服务器,我意识到你必须在Windows防火墙和EC2安全组中打开端口5672 两个 - 这里有两个重叠级别的访问控制如果您的计算机是EC2上的Windows服务器,则在EC2管理控制台中打开端口是不够的,因为您还必须配置Windows服务器防火墙。