部署记录
docker network create rabbit
docker run -d --hostname mq1 --name mq1 -p 5672:5672 -p 15672:15672 --network rabbit -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq
docker run -d --hostname mq2 --name mq2 --network rabbit -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link mq1:mq1 rabbitmq
docker exec -it mq2 bash
cd /usr/sbin
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@mq1
rabbitmqctl start_app
docker run -d --hostname mq3 --name mq3 --network rabbit -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link mq1:mq1 rabbitmq
docker exec -it mq3 bash
cd /usr/sbin
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@mq1
rabbitmqctl start_app
docker exec -it mq1 bash
cd /usr/sbin
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl cluster_status
添加策略
#添加策略
rabbitmqctl set_policy ha-all "test" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
或者使用UI界面添加,更加方便
添加完之后,我们使用界面,或者Python生成一个消息列队
#server
import pika
connection=pika.BlockingConnection(pika.ConnectionParameters(host="192.168.42.75",port=5672))
channel=connection.channel()
channel.queue_declare(queue="test",durable=True) #durable代表是否持久化
print("public queue test and body")
while 1:
line=input()
channel.basic_publish(exchange='',routing_key='test',body=line) # #注意当未定义exchange时,routing_key需和queue的值保持一致
connection.close()
#client
import pika
connection=pika.BlockingConnection(pika.ConnectionParameters(host="192.168.42.75",port=5672))
channel=connection.channel()
channel.queue_declare(queue="test",durable=True) #durable代表是否持久化
def callback(ch,method,prop,body):
print("recv: %s" % body)
channel.basic_consume(on_message_callback=callback,queue='test',auto_ack=True) #auto_ack 收到后是否删除
channel.start_consuming()
以上配置生效后,会自动将交换机与列队变成自动HA,进行镜像