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 のワークロードが大幅に増加します。

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 はこの接続を直接再利用します。

AMQProxy の詳細については、「AMQProxy」をご参照ください。
AMQProxy のデプロイ
次のコマンドを実行して、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」をご参照ください。
次のコマンドを実行して、ダウンロードしたパッケージを解凍します。
tar -xzvf amqproxy-0.4.4-1.linux-x86_64-static.tar.gz次のコマンドを実行して、AMQProxy フォルダーを開きます。
cd amqproxy/次のコマンドを実行して、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 インスタンス間の接続数。
クライアントのコード内のホスト IP アドレスとポート番号を、AMQProxy の IP アドレスとリスニングポートに変更します。
factory.setHost("127.0.0.1"); factory.setPort(5673);