RabbitMQ-07 持久化

队列持久化

        之前我们创建的队列都是非持久化的,rabbitmq如果重启的化,该队列就会被删除掉,如果 要队列实现持久化 需要在声明队列的时候把durable参数设置为持久化 

 下面修改一下持久化参数为true

不出所料,果真报错,原因是我们之前已经声明了他是一个不持久化的队列,所以我们需要把他删除掉重新进行一次声明  

完成操作后进入管理页面看到”D“标识,则证明该队列已经持久化成功,重启后队列依旧存在,

例如下方所示,如果重启mq那么队列将只显示name为seckill-mongo-save.default

的队列

消息持久化

        刚才已经介绍了队列持久化,那么一定可以保证消息不丢失吗?结果显然不是,我们还需要对消息进行持久化。再发消息时我们需要通知队列该消息是持久化的。对于简单的队列而言,我们只需要在发布消息时修改一个参数,来告诉RabbitMQ将消息保存到磁盘,但是这里依然存在当消息刚准备存储在磁盘的时候 但是还没有存储完,消息还在缓存的一个间隔点。此时并没有真正写入磁盘。如果需要更强有力的持久化策略,后续会继续更新消息的发布确认

        代码段演示

        while (scanner.hasNext()){
            String message = scanner.next();
            /**
             * 发送一个消息
             * 1.发送到哪个交换机
             * 2.路由的key值是哪一个 本次是队列名称
             * 3.其他参数信息  MessageProperties.PERSISTENT_TEXT_PLAIN 生产者发送的消息持久化到磁盘且优先级为0
             * 4.发送消息的消息体
             * 5.getBytes("UTF-8") 中文汉字进行二进制转换时防止乱码
             */
            channel.basicPublish("",TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes("UTF-8"));
            System.out.println("生产者发出消息"+message);

        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那山川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值