阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

RabbitMQ消息持久化

154次阅读
没有评论

共计 1863 个字符,预计需要花费 5 分钟才能阅读完成。

一、前言

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

二、队列持久化

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

在 windows 环境下,在 rabbitmq 的安装目录 /sbin 下,通过 rabbitmqctl.bat list_queues 查看 RabbitMQ 消息持久化

这边启动了两个 producer, 分别生成两个队列 hello 和 hello1, 并且他们都有一个消息存在

重启 rabbitmq,模拟故障

RabbitMQ 消息持久化

可以看到重启后两个队列都消失了

2.2 持久化队列

我们就 hello 队列持久化

在声明队列名称时,持久化队列,生产端和消费端都要

channel.queue_declare(queue='hello', durable=True)

我们重复上面的操作,但是给 hello 队列做持久化,而 hello1 不做,并重启 rabbitmq

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

RabbitMQ 消息持久化

可以看到,经过队列和消息持久化后的 hello, 在重启的情况下,队列和消息都存在,没有消失。

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

RabbitMQ 消息持久化

四、总结

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

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

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

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

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

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

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

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

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

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

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

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

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计1863字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中