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}}}]
答案 0 :(得分:5)
在这里回答我自己的问题,以防其他人遇到这个问题。这个错误(如果你得到它也会出现超时错误,{{badmatch,{error,etimedout}},),这几乎肯定是两台机器之间的通信问题,很可能是由于端口访问/防火墙设置。
我在这里做了几件蠢事:
1)我的远程EC2实例使用了错误的DNS(D'哦!真的很笨 - 不能告诉你我花了多长时间撞在墙上的这个......)。请记住,如果您没有与实例关联的弹性IP,则停止和启动实例会生成新的DNS。
2)我的远程实例是一个Windows服务器,我意识到你必须在Windows防火墙和EC2安全组中打开端口5672 两个 - 这里有两个重叠级别的访问控制如果您的计算机是EC2上的Windows服务器,则在EC2管理控制台中打开端口是不够的,因为您还必须配置Windows服务器防火墙。