私は、RackbitMQが未実装のメッセージで「固まっている」ことを確認しました。待ち行列にはもう存在しない消費者が表示されます。私は、RabbitMQがそのコンシューマにメッセージを引き続き送信していることを想定しています。これらのメッセージは、増え続けるメッセージの数が増えていることを示しています。私はphp-amqplibでPHPでこれをやっています。rabbitMQがphp-amqplibでハートビートを使用できない
私は消費者プロセスを殺すことによって問題を引き起こすことができます(コマンドラインではcontrol-C)。
私は3秒のハートビートを指定しようとしましたが、キープアライブをtrueとfalseの両方で試しました。ハートビートを使用すると、消費者は最終的に失敗します:
Exception fwrite(): send of 573 bytes failed with errno=32 Broken pipe
PhpAmqpLib\Wire\IO\StreamIO->error_handler(8, 'fwrite(): send ...',
php-amqplib/PhpAmqpLib/Wire/IO/StreamIO.php(281): fwrite(Resource id #176, '\x01\x00\x01\x00\x00\x00\x15\x00<\x00(\x00\x00\fb...', 8192)
問題#374が関係あります:https://github.com/php-amqplib/php-amqplib/issues/374
を消費者が複数のキューから消費しているが、私はそれは問題ではないはずと信じています。
私が解決しようとしている問題は、RabbitMQが消費者が存在しないときに存在していると考え続けていることです。その結果、RabbitMQはこれらのメッセージをどこにも届かず、無認可になります。私は、それらのメッセージを実際の消費者に再配信できるように、その偽の接続を取り除く方法を探しています。私はそれが心拍のためだと思うが、私はそれを働かせていない。
ハートビートhereとデッドTCP接続の検出についての詳細を読むことができますを有効にしているのですか? – cantSleepNow
私はしません。私は、メッセージの作業が完了した後に、拒否を介してスロットルをすることができる必要があります。 –