rabbitmqmysql持久化_RabbitMQ消息持久化
⼀、前⾔
如果我们希望即使在RabbitMQ服务重启的情况下,也不会丢失消息,我们可以将Queue与Message都设置为可持久化的(durable),这样可以保证绝⼤部分情况下我们的RabbitMQ消息不会丢失。当然还是会有⼀些⼩概率事件会导致消息丢失。
⼆、队列持久化
2.1 查看存在的队列和消息数量
在windows环境下,在rabbitmq的安装⽬录/sbin下,通过rabbitmqctl.bat list_queues查看mysql windows安装教程
这边启动了两个producer,分别⽣成两个队列hello 和 hello1,并且他们都有⼀个消息存在
重启rabbitmq,模拟故障
可以看到重启后两个队列都消失了
2.2 持久化队列
我们就hello队列持久化
在声明队列名称时,持久化队列,⽣产端和消费端都要
channel.queue_declare(queue='hello', durable=True)
我们重复上⾯的操作,但是给hello队列做持久化,⽽hello1不做,并重启rabbitmq
可以看到重启后,hello队列还在,hello1队列消失了,但是原本hello中的⼀条消息也没有保存下来。所以在这边我们仅仅做到了消息队列的持久化,还没有做消息持久化。
三、消息持久化
我们刚才实现了在rabbitmq崩溃的情况下,就队列本⾝保存下来,重启后队列还在。接下来我们要将消息也保存下来,即消息的持久化
channel.basic_publish(exchange='',
routing_key='hello',
body='hello',
properties=pika.BasicProperties(
delivery_mode=2, # make message persistent
))
# 增加properties,这个properties 就是消费端 callback函数中的properties
# delivery_mode = 2 持久化消息
⽣产端⽣成⼀个消息,并重启rabbitmq
可以看到,经过队列和消息持久化后的hello, 在重启的情况下,队列和消息都存在,没有消失。
消费端再重启后也能正常接收
四、总结
队列持久化需要在声明队列时添加参数 durable=True,这样在rabbitmq崩溃时也能保存队列
仅仅使⽤durable=True ,只能持久化队列,不能持久化消息
消息持久化需要在消息⽣成时,添加参数 properties=pika.BasicProperties(delivery_mode=2)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论