AMQProxy是一款開源AMQP代理服務,具備複用AMQP Connection的能力。您可以通過該代理服務使原本只能使用短串連的用戶端(例如PHP用戶端)使用長串連,從而減少網路資源消耗和雲訊息佇列 RabbitMQ 版資源消耗。
前提條件
如果您要使用SSL串連AMQProxy和雲訊息佇列 RabbitMQ 版,請確保您的用戶端伺服器已安裝OpenSSL。更多資訊,請參見Downloads。
VPC環境下不支援使用SSL串連雲訊息佇列 RabbitMQ 版。
背景資訊
部分語言的用戶端,例如PHP用戶端,無法使用長串連,會頻繁地開啟或關閉Connection,消耗大量的網路資源和雲訊息佇列 RabbitMQ 版資源,從而對雲訊息佇列 RabbitMQ 版造成巨大壓力。
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。
更多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。
執行以下命令解壓AMQProxy壓縮包。
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
雲訊息佇列 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數量。
在用戶端代碼中將Host和連接埠修改為AMQProxy IP地址和監聽連接埠。
factory.setHost("127.0.0.1"); factory.setPort(5673);