使用AMQProxy解決PHP等客戶端Connection復用問題
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);