目录导航
-
撤销(Ctrl+Z)
-
重做(Ctrl+Y)
-
清空
-
H
标题(Ctrl+1~6)
- 一级标题
- 二级标题
- 三级标题
- 四级标题
- 五级标题
- 六级标题
-
粗体(Ctrl+B)
-
斜体(Ctrl+I)
-
删除线
-
插入引用(Ctrl+Q)
-
无序列表(Ctrl+U)
-
有序列表(Ctrl+O)
-
表格
-
插入分割线
-
插入链接(Ctrl+L)
-
插入图片
- 添加图片链接
-
插入代码块
-
保存(Ctrl+S)
-
开启预览
-
开启目录导航
-
关闭同步滚动
-
全屏(按ESC还原)
### 背景 * 部分语言的客户端,例如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。 ![image.png](https://wenknow-img.oss-cn-shanghai.aliyuncs.com/img/article/2022-08-08/1659924143-image.png) ### 部署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 ``` #### 2、解压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版实例的接入点。 #### 运行AMQProxy ``` ./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); ``` #### 使用supervisor管理 ##### 下载supervisor ``` yum install supervisor # 配置开机启动 systemctl enable supervisor 或 systemctl enable supervisord ``` ##### 添加服务配置 * CentOS中的配置文件为/etc/supervisord.conf,配置文件目录为/etc/supervisord.d/,配置文件目录中的配置文件后缀为.ini。 Debian中的配置文件为/etc/supervisor/supervisord.conf,配置文件目录为/etc/supervisor/conf.d,配置文件目录中的配置文件后缀为.conf。 ``` # 直接在配置文件中加入,或者在包含目录中新建都可以 vim /etc/supervisord.conf # 加入以下内容 [program:amqproxy] command=/bin/bash /usr/local/amqproxy/supervisor.sh user=root startretries=1 autostart=true killasgroup=true stopasgroup=true stdout_logfile=/var/log/amqproxySupervisor.log stderr_logfile=/var/log/amqproxySupervisor.err ``` #### 创建启动脚本 ``` vim /usr/local/amqproxy/supervisor.sh # 加入以下内容 /usr/local/amqproxy/amqproxy -l 0.0.0.0 -p 5673 amqp://127.0.0.1 # 保存文件 wq # 赋予可执行权限 chmod +x /usr/local/amqproxy/supervisor.sh ``` #### 启动supervisor ``` supervisorctl start amqproxy # 查看运行状态 supervisorctl status ```
背景
- 部分语言的客户端,例如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
1、执行以下命令下载AMQProxy压缩包。
wget https://github.com/cloudamqp/amqproxy/releases/download/v0.4.4/amqproxy-0.4.4-1.linux-x86_64-static.tar.gz
2、解压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 |
- amqp:AMQP协议。不使用SSL连接时使用。
amqps:AMQP/SSL协议。使用SSL连接时使用。
endpoint:消息队列RabbitMQ版实例的接入点。
运行AMQProxy
./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);
使用supervisor管理
下载supervisor
yum install supervisor
# 配置开机启动
systemctl enable supervisor 或 systemctl enable supervisord
添加服务配置
- CentOS中的配置文件为/etc/supervisord.conf,配置文件目录为/etc/supervisord.d/,配置文件目录中的配置文件后缀为.ini。
Debian中的配置文件为/etc/supervisor/supervisord.conf,配置文件目录为/etc/supervisor/conf.d,配置文件目录中的配置文件后缀为.conf。
# 直接在配置文件中加入,或者在包含目录中新建都可以
vim /etc/supervisord.conf
# 加入以下内容
[program:amqproxy]
command=/bin/bash /usr/local/amqproxy/supervisor.sh
user=root
startretries=1
autostart=true
killasgroup=true
stopasgroup=true
stdout_logfile=/var/log/amqproxySupervisor.log
stderr_logfile=/var/log/amqproxySupervisor.err
创建启动脚本
vim /usr/local/amqproxy/supervisor.sh
# 加入以下内容
/usr/local/amqproxy/amqproxy -l 0.0.0.0 -p 5673 amqp://127.0.0.1
# 保存文件
wq
# 赋予可执行权限
chmod +x /usr/local/amqproxy/supervisor.sh
启动supervisor
supervisorctl start amqproxy
# 查看运行状态
supervisorctl status
评论
请
登录后发表观点