全部產品
Search
文件中心

ApsaraMQ for RabbitMQ:使用AMQProxy解決PHP等用戶端Connection複用問題

更新時間:Jun 30, 2024

AMQProxy是一款開源AMQP代理服務,具備複用AMQP Connection的能力。您可以通過該代理服務使原本只能使用短串連的用戶端(例如PHP用戶端)使用長串連,從而減少網路資源消耗和雲訊息佇列 RabbitMQ 版資源消耗。

前提條件

如果您要使用SSL串連AMQProxy和雲訊息佇列 RabbitMQ 版,請確保您的用戶端伺服器已安裝OpenSSL。更多資訊,請參見Downloads

重要

VPC環境下不支援使用SSL串連雲訊息佇列 RabbitMQ 版

背景資訊

部分語言的用戶端,例如PHP用戶端,無法使用長串連,會頻繁地開啟或關閉Connection,消耗大量的網路資源和雲訊息佇列 RabbitMQ 版資源,從而對雲訊息佇列 RabbitMQ 版造成巨大壓力。

dg_AMQP Proxy_1

AMQProxy

AMQProxy是Cloud AMQP提供的開源AMQP代理服務。用戶端可以通過該代理服務與雲訊息佇列 RabbitMQ 版保持長串連。當您在用戶端伺服器部署AMQProxy後,用戶端和雲訊息佇列 RabbitMQ 版之間的請求都會先發送到AMQProxy,然後由AMQProxy轉寄到對方。

AMQProxy處理用戶端發起的Connection相關請求的邏輯如下:

  • 如果用戶端發送開啟Connection的請求,AMQProxy將根據使用者名稱、密碼、Vhost尋找當前是否有合適的Connection可以複用,如果有就複用該Connection,如果沒有就由AMQProxy代替用戶端和雲訊息佇列 RabbitMQ 版開啟Connection。

  • 如果用戶端發送關閉Connection的請求,AMQProxy會直接應答OK,但並不會關閉與雲訊息佇列 RabbitMQ 版的Connection,當該用戶端下次再請求開啟Connection時,AMQProxy會直接使用該Connection。

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. 執行以下命令解壓AMQProxy壓縮包。

    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

    雲訊息佇列 RabbitMQ 版執行個體的URL。格式為{amqp|amqps}://{endpoint}

    • amqp:AMQP協議。不使用SSL串連時使用。

    • amqps:AMQP/SSL協議。使用SSL串連時使用。

    • endpoint雲訊息佇列 RabbitMQ 版執行個體的存取點。您可以在雲訊息佇列 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的Connection數量。

    upstreams

    AMQProxy和雲訊息佇列 RabbitMQ 版執行個體的Connection數量。

  5. 在用戶端代碼中將Host和連接埠修改為AMQProxy IP地址和監聽連接埠。

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