使用 Pika 连接 rabbitmq 集群
使用 python 编程经常会用到 pika 来向 rabbitmq 发送消息,单个 rabbitmq 节点连接比较简单,本文介绍使用 rabbitmq 集群情况下的连接方式。
vip 连接方式
在 client 与 rabbitmq server 之间通过 haproxy 等负载均衡来提供 vip,我使用的环境就是采用这种方式,但是遇到某一节点挂掉时再访问 vip 连接 rabbitmq 集群会连接失败,常见 log 如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
|
这个报错通常是由于网络问题导致,尝试过 Telnet 连接 vip 和端口,都正常返回,目前还未找到 pika 访问 vip 连接 rabbitmq 失败的原因,所以采用类似于 openstack 中连接 rabbitmq 的方式,配置多主机列表,建立连接池。
配置 multiple hosts
openstack 配置transport_url 采用 rabbitmq 集群 host 列表方式,然后在 oslo.message 中建立连接池,通过 kombu 来使用 rabbitmq。参考这种方式,用 pika 实现。
pika 的官方文档中有示例参考 blocking_consume_recover_multiple_hosts
实际实现的时候会抛异常,原因是传递给 pika 需要是个实例而不是列表,官网上提供的方式把 host url 参数化后直接放到列表里传给 pika 进行连接:
1
2
3
4
5
|
|
实际执行后报错如下:
1
|
|
github 上提交的 issue: parameters error
目前不支持直接传入多 host url 来池化 rabbitmq 集群的连接,所以要在应用程序中单独实现。
用一个简单 for 循环来做:
1
2
3
4
5
6
7
8
9
|
|
用 shuffle 来改变列表中的 host 顺序,可以起到负载均衡的作用。
使用 Pika 连接 rabbitmq 集群
使用 python 编程经常会用到 pika 来向 rabbitmq 发送消息,单个 rabbitmq 节点连接比较简单,本文介绍使用 rabbitmq 集群情况下的连接方式。
vip 连接方式
在 client 与 rabbitmq server 之间通过 haproxy 等负载均衡来提供 vip,我使用的环境就是采用这种方式,但是遇到某一节点挂掉时再访问 vip 连接 rabbitmq 集群会连接失败,常见 log 如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
|
这个报错通常是由于网络问题导致,尝试过 Telnet 连接 vip 和端口,都正常返回,目前还未找到 pika 访问 vip 连接 rabbitmq 失败的原因,所以采用类似于 openstack 中连接 rabbitmq 的方式,配置多主机列表,建立连接池。
配置 multiple hosts
openstack 配置transport_url 采用 rabbitmq 集群 host 列表方式,然后在 oslo.message 中建立连接池,通过 kombu 来使用 rabbitmq。参考这种方式,用 pika 实现。
pika 的官方文档中有示例参考 blocking_consume_recover_multiple_hosts
实际实现的时候会抛异常,原因是传递给 pika 需要是个实例而不是列表,官网上提供的方式把 host url 参数化后直接放到列表里传给 pika 进行连接:
1
2
3
4
5
|
|
实际执行后报错如下:
1
|
|
github 上提交的 issue: parameters error
目前不支持直接传入多 host url 来池化 rabbitmq 集群的连接,所以要在应用程序中单独实现。
用一个简单 for 循环来做:
1
2
3
4
5
6
7
8
9
|
|
用 shuffle 来改变列表中的 host 顺序,可以起到负载均衡的作用。
redis安装 在虚拟机创建redis文件夹 mkdir –p /usr/local/src/redis 进入文件夹 cd /usr/local/src/redis 通过Xhell传输redis到虚拟机中,或者通过CentOS tools可以直接拖拽文件到虚拟机的制定位置解压 redis文件 tar xzf redis-3.0.7.tar.gz 解压完毕后,