3

そのため、クラスター化されたrabbitmqバックエンドを備えた複数のサーバーでセロリを実行しています。最近、セロリで何をしても無期限にハングし始め、rabbitmq のログを確認すると、次のあいまいなエラー メッセージが表示されます。

=ERROR REPORT==== 20-Mar-2013::23:52:25 ===
connection <0.15823.3>, channel 1 - soft error:
{amqp_error,not_found,
        "no binding i-69995906 between exchange 'i-69995906' in vhost 'celery' and queue 'i-69995906' in vhost 'celery'",
        'queue.bind'}

rabbitmqctl list_bindings を実行すると、次のようになります。

# rabbitmqctl list_bindings -p celery
Listing bindings ...
        exchange    celery  queue   celery  []
celery  exchange    celery  queue   celery  []
...done.

エラーを取り除くにはどうすればよいですか? すでに Rabbitmq を再起動し、Rabbitmq を再インストールし、クラスターを削除して復元しました。既存のバインディングを復元する必要があると推測していますが、rabbitmqctl またはセロリからの方法がわかりません。これが機能しない場合、私のセロリのタスクはまったく機能しません。

4

3 に答える 3

5

同じ問題があり、クラスターをシャットダウンしたり、仮想ホストをリセットしたりせずに修正できました。

クラスターにバインドされた 3 つのルーティング キーを持つキューがありました。ノードの1つがダウンしている間にキューを削除する必要があり、その後、ルーティングキーを同じ名前で新しく作成されたキューに再度登録しようとすると、常に「仮想ホストとキューの交換の間にバインディングがありません」というエラーが発生しました。

元のキューは「Durable」として作成され、解決策は次のとおりでした。

  • キューを削除する
  • 同じ名前で「Transient」(非永続) の新しいキューを作成します。
  • 元の 3 つのルーティング キーをキューに登録します。エラーが発生しなくなりました。

永続的なキューが必要だったので、もう一度キューを削除し、同じ名前の新しい「永続的な」キューを作成してから、ルーティング キーをバインドすると完全に機能しました。

おそらく、「耐久性」タイプが異なる新しいキューを作成することで、まだどこかに残っていた古いバインディングをリセットしました。

于 2015-11-27T21:51:30.913 に答える
2

このエラーも発生しましたが、それを解決する唯一の方法は、クラスター全体を一度にシャットダウンし、数秒間オフにすることでした。

序文: 以前にいくつかのパーティションが発生し、1 つのキューにプッシュできず、バインディングを再作成できず、あなたと同じエラーが発生しました。

1つずつ停止して開始しても機能しません。エラーは残りますが、クラスターの一部のノードが何か障害のある ip/config をキャッシュしたと思います。

検出rabbitmqctl list_queues: これがすべてのノードで実行されているエラーであるかどうかを判断する良い方法です。ノードが異なるキューを示している場合は、何か問題が発生しています。

解決策: 前述のように、解決策はすべてのウサギ サーバーを数秒間停止することでした。そのため、「キャッシュ」はありません。もちろん、これは永続的なキューに依存していないという解決策にすぎません。

于 2015-05-07T14:40:48.477 に答える