rabbitmq的队列和消息持久化

rabbitmq的持久化

1、rabbitmq队列开启持久化

1. 需要在声明时开启durable(持久的)

        //声明队列
        boolean durable = true;//是否开启持久化
        channel.queueDeclare(QUEUE_NAME,durable,false,false,null);

2. 测试未开启持久化重启rabbitmq

在这里插入图片描述

我们发现所有的队列都没了

3. 重新发送队列

在这里插入图片描述

D标志是我们使用了队列持久化的
继续重启rabbitmq

在这里插入图片描述

我们发现除了持久化的队列其他都没了,但是他自己本身的消息却没有存下来

2、队列消息持久化

  1. 我们使用的是channel.basicPublish发送消息,我们查看源码

在这里插入图片描述

其中关键就是第三个参数,BasicProperties,我们打开它

在这里插入图片描述
在这里插入图片描述

deliveryMode=1代表不持久化,deliveryMode=2代表持久化

  1. 我们使用MessageProperties.PERSISTENT_TEXT_PLAIN开启消息持久化

MessageProperties.PERSISTENT_TEXT_PLAIN默认设置了deliveryMode=2

channel.basicPublish("", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, msg.getBytes());

  1. 也可以使用
AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder();
builder.deliveryMode(2);
AMQP.BasicProperties properties = builder.build();
channel.basicPublish("", QUEUE_NAME, properties, msg.getBytes());

原因:
在这里插入图片描述
在这里插入图片描述

3、交换机的持久化

  1. 在我们使用发布订阅的模式中,如果队列和消息都是持久化的,而交换机却不是持久化的
  2. 经过实验发现,模拟服务器死机之后重启生成者将无法发送消息给队列
  3. 因为交换机已经不存在了,所以我们得给交换机也实现持久化
//声明交换机
        channel.exchangeDeclare(EXCHANGE_NAME,"fanout", true);//开启持久化的交换机
        //详细代码参考订阅模式
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值