你好,游客 登录 注册 搜索
背景:
阅读新闻

RabbitMQ消息持久化

[日期:2018-01-05] 来源:Linux社区  作者:bigberg [字体: ]

一、前言

  如果我们希望即使在RabbitMQ服务重启的情况下,也不会丢失消息,我们可以将Queue与Message都设置为可持久化的(durable),这样可以保证绝大部分情况下我们的RabbitMQ消息不会丢失。当然还是会有一些小概率事件会导致消息丢失。

二、队列持久化

  2.1 查看存在的队列和消息数量

  在windows环境下,在rabbitmq的安装目录/sbin下,通过rabbitmqctl.bat list_queues查看 

  这边启动了两个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, 在重启的情况下,队列和消息都存在,没有消失。

  消费端再重启后也能正常接收

  

四、总结

  1. 队列持久化需要在声明队列时添加参数 durable=True,这样在rabbitmq崩溃时也能保存队列
  2. 仅仅使用durable=True ,只能持久化队列,不能持久化消息
  3. 消息持久化需要在消息生成时,添加参数 properties=pika.BasicProperties(delivery_mode=2)

CentOS 7.2 下 RabbitMQ 集群搭建 http://www.chineselinuxuniversity.net/Linux/2016-12/137812.htm

CentOS7环境安装使用专业的消息队列产品RabbitMQ http://www.chineselinuxuniversity.net/Linux/2016-11/13673.htm

RabbitMQ入门教程  http://www.chineselinuxuniversity.net/Linux/2015-02/113983.htm

在CentOS7上安装RabbitMQ 详解  http://www.chineselinuxuniversity.net/Linux/2017-05/143765.htm

NServiceBus 结合 RabbitMQ 使用教程  http://www.chineselinuxuniversity.net/Linux/2017-05/143787.htm

CentOS 7下RabbitMQ集群安装配置  http://www.chineselinuxuniversity.net/Linux/2017-10/147707.htm

RabbitMQ实战:高效部署分布式消息队列 中文PDF扫描版  http://www.chineselinuxuniversity.net/Linux/2017-10/147592.htm

CentOS7上RabbitMQ安装详述  http://www.chineselinuxuniversity.net/Linux/2017-12/149202.htm

RabbitMQ分布式集群架构和高可用性(HA)  http://www.chineselinuxuniversity.net/Linux/2017-12/149466.htm

RabbitMQ 的详细介绍请点这里
RabbitMQ 的下载地址请点这里

本文永久更新链接地址http://www.chineselinuxuniversity.net/Linux/2018-01/150106.htm

linux
相关资讯       RabbitMQ消息持久化  消息持久化 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款