すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RabbitMQ:PHP クライアントなどのクライアントの接続再利用の問題を AMQProxy を使用して解決する

最終更新日:Jan 14, 2025

AMQProxy は、AMQP 接続を再利用できるオープンソースの AMQP プロキシサービスです。 AMQProxy を使用すると、通常は短期間の接続しか使用できない PHP クライアントなどのクライアントが永続的な接続を使用できるようになります。 これにより、ネットワークと ApsaraMQ for RabbitMQ リソースの消費が削減されます。

前提条件

SSL を使用して AMQProxy を ApsaraMQ for RabbitMQ に接続する場合、クライアント側のサーバーに OpenSSL がインストールされている必要があります。 詳細については、「Downloads」をご参照ください。

重要

VPC 環境では、SSL を使用して AMQProxy を ApsaraMQ for RabbitMQ に接続することはできません。

背景情報

PHP クライアントなど、一部のプログラミング言語のクライアントは、永続的な接続をサポートしていません。 クライアントの接続を頻繁に有効または無効にすると、大量のネットワークと ApsaraMQ for RabbitMQ リソースが消費されます。 これにより、ApsaraMQ for RabbitMQ のワークロードが大幅に増加します。

dg_AMQP Proxy_1

AMQProxy

AMQProxy は、CloudAMQP によって開発されたオープンソースの AMQP プロキシです。 AMQProxy を使用すると、クライアントと ApsaraMQ for RabbitMQ の間に永続的な接続を有効にすることができます。 クライアントサーバーに AMQProxy をデプロイすると、クライアントから ApsaraMQ for RabbitMQ へのリクエストは最初に AMQProxy に送信され、次に ApsaraMQ for RabbitMQ に転送されます。

AMQProxy は、次のロジックに基づいて、クライアントによって開始された接続関連のリクエストを処理します。

  • クライアントが接続を有効にするリクエストを送信すると、AMQProxy はユーザー名、パスワード、および vhost に基づいて既存の接続を再利用できるかどうかを確認します。 既存の接続が再利用要件を満たしている場合、その接続が再利用されます。 既存の接続が再利用要件を満たしていない場合、AMQProxy はクライアントと ApsaraMQ for RabbitMQ の新しい接続を有効にします。

  • クライアントが接続を無効にするリクエストを送信すると、AMQProxy は OK を返しますが、ApsaraMQ for RabbitMQ との接続は無効にしません。 クライアントが接続の再有効化をリクエストすると、AMQProxy はこの接続を直接再利用します。

dg_AMQP Proxy_2

AMQProxy の詳細については、「AMQProxy」をご参照ください。

AMQProxy のデプロイ

  1. 次のコマンドを実行して、AMQProxy 圧縮パッケージをダウンロードします。

    wget https://github.com/cloudamqp/amqproxy/releases/download/v0.4.4/amqproxy-0.4.4-1.linux-x86_64-static.tar.gz
    説明

    このトピックでは、AMQProxy 0.4.4 を例として使用しています。 その他の AMQProxy バージョンについては、「Releases」をご参照ください。

  2. 次のコマンドを実行して、ダウンロードしたパッケージを解凍します。

    tar -xzvf amqproxy-0.4.4-1.linux-x86_64-static.tar.gz
  3. 次のコマンドを実行して、AMQProxy フォルダーを開きます。

    cd amqproxy/
  4. 次のコマンドを実行して、AMQProxy を起動します。

    ./amqproxy -l LISTEN_ADDRESS -p LISTEN_PORT AMQP_URL

    パラメーター

    説明

    LISTEN_ADDRESS

    AMQProxy の IP アドレス。 AMQProxy はクライアントのサーバーにデプロイされているため、このパラメーターを 127.0.0.1 に設定できます。

    LISTEN_PORT

    AMQProxy のリスニングポート。 クライアントはこのポート経由で AMQProxy にリクエストを送信します。 ポート 5673 など、使用可能なすべてのポートをリスニングポートとして使用できます。

    AMQP_URL

    ApsaraMQ for RabbitMQ インスタンスの URL。 URL は {amqp|amqps}://{endpoint} 形式である必要があります。 有効な値:

    • amqp: AMQP プロトコル。 接続の確立に Secure Sockets Layer (SSL) を使用しない場合は、このパラメーターを使用します。

    • amqps: AMQP および SSL プロトコル。 接続の確立に SSL プロトコルを使用する場合は、このパラメーターを使用します。

    • endpoint: ApsaraMQ for RabbitMQ インスタンスのエンドポイント。 エンドポイントは、ApsaraMQ for RabbitMQ コンソールの [インスタンス] ページで確認できます。 詳細については、「インスタンスの詳細の表示」をご参照ください。

    コマンドの例:

    ./amqproxy -l 127.0.0.1 -p 5673 amqps://188XXX420.mq-amqp.cn-hangzhou-a.aliyuncs.com

    レスポンスの例:

    Proxy upstream: 188XXX420.mq-amqp.cn-hangzhou-a.aliyuncs.com:5671 TLS
    Proxy listening on 127.0.0.1:5673
    0 clients                0 upstreams

    パラメーター

    説明

    clients

    クライアントと AMQProxy 間の接続数。

    upstreams

    AMQProxy と ApsaraMQ for RabbitMQ インスタンス間の接続数。

  5. クライアントのコード内のホスト IP アドレスとポート番号を、AMQProxy の IP アドレスとリスニングポートに変更します。

    factory.setHost("127.0.0.1");
    factory.setPort(5673);