6

RabbitMQ は問題なく起動しますが、shovel プラグインのステータスは「開始中」と表示されます。

私は次の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 'rabbit_shovel_status:status().'

戻り値:

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

This questionによると、これは、2 つのブローカーでユーザーが正しく設定されていない場合に発生する可能性があります。ただし、両方のマシンで 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}}}]
4

1 に答える 1

7

他の人がこの問題に遭遇した場合に備えて、ここで自分の質問に答えます。このエラー (およびタイムアウト エラー {{badmatch,{error,etimedout}}) は、ほぼ確実に 2 台のマシン間の通信の問題であり、ポート アクセス/ファイアウォールの設定が原因である可能性が最も高いです。

私がここで行っていたいくつかのばかげたことがありました:

1) リモート EC2 インスタンスに間違った DNS を使用していました (D'oh! 本当に馬鹿げています。このインスタンスで壁に頭をぶつけてどれだけの時間を費やしたかわかりません...)。インスタンスに Elastic IP が関連付けられていない場合は、インスタンスを停止して開始すると、新しい DNS が生成されることに注意してください。

2) 私のリモート インスタンスは Windows サーバーであり、Windows ファイアウォールと EC2 セキュリティ グループの両方でポート 5672 を開く必要があることに気付きました。ここには 2 つの重複するレベルのアクセス制御があり、EC2 管理でポートを開きます。マシンが EC2 上の Windows サーバーである場合、Windows サーバー ファイアウォールも構成する必要があるため、コンソールだけでは十分ではありません。

于 2012-07-13T20:24:59.873 に答える