他のスレッドでも同様の問題を見たことがありますが、決定的な答えはありません。
約 4 つのコンシューマー (Bunny クライアント gem を使用して Ruby で記述) をスピンアップして、同じキューにサブスクライブし、メッセージを処理します。約 20,000 から 40,000 のメッセージが消費されるまで、すべて正常に動作します。その後、コンシューマーは単にメッセージの受信を停止します。接続/チャネルは開いたままになり、サーバーは引き続きコンシューマーを認識しますが、メッセージを受信しません。
同様のスレッドで提案されているように、プリフェッチの問題ではないと思います。さまざまなレベルでプリフェッチを設定しましたが、問題は解決しません。問題は、1 つのコンシューマが他のコンシューマよりも先にすべてのメッセージを取得していることではなく、すべてのコンシューマが停止していることです。
ホストされたRabbitMQサービスCloudAMQPを使用しているので、パフォーマンスの問題である可能性があると考えましたが、メッセージの発行は引き続き正常に機能しており、選択したインスタンスサイズに関係なく同じ問題を抱えています. ログを見ても何もおかしくない。
ch.acknowledge(delivery_info.delivery_tag, false) を使用してメッセージを明示的に確認していることを付け加えておきます。
私はここで少し困惑しており、あなたの助けに本当に感謝しています. 重要な詳細を省略した場合はお知らせください。
いくつかのコード例:
ch = Bunny.new(connection_parameters).start.create_channel
ch.queue(queue).subscribe(consumer_tag: 'worker', block: true, manual_ack: true) do |delivery_info, _metadata, msg = q.pop|
process_message msg
ch.acknowledge(delivery_info.delivery_tag, false)
end