web-dev-qa-db-ja.com

rabbitmqハートビートの仕組み

Javaのネイティブrabbitmqクライアントを使用すると、次のように接続設定でハートビートを設定できます。

import com.rabbitmq.client.ConnectionFactory;

...

ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setAutomaticRecoveryEnabled(true);
        connectionFactory.setHost("some://Host");
        connectionFactory.setConnectionTimeout(5000);
        connectionFactory.setRequestedHeartbeat(5); // keeps an idle connection alive

Rabbitmqクライアントはハートビート設定で何をしていますか?それは特別な交換/キューにスタブ化されたメッセージを送信していますか、それとも他に何をしていますか?

誰かがそれを詳細に説明できますか?

13
Oleg Majewski

RMQハートビートのドキュメント から:

ネットワークはさまざまな方法で失敗する可能性があり、かなり微妙な場合もあります(たとえば、パケット損失率が高いなど)。中断されたTCP接続は、オペレーティングシステムによって検出されるのに適度に長い時間がかかります(たとえば、Linuxのデフォルト設定では約11分)。AMQP0-9-1は、アプリケーションレイヤーが中断された接続(および完全に応答しないピア)について迅速に検出すること。ハートビートは、「アイドル」を終了する可能性がある特定のネットワーク機器に対しても防御しますTCP接続。

これはキューまたはスタブ化されたメッセージへのリクエストではありません。これは、ハートビート用の特定の形式でパケットが送信されるTCP/IP接続です。

実際の詳細が必要な場合は、 AMQP 0.9.1仕様 のセクション4.2.1および4.2.7にエラッタを付けて RabbitMQが仕様のエラーを修正する方法 を参照してください。 、 同じように。

10
Derick Bailey