• RabbitMQ-06 持久化


    队列持久化

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

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

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

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

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

    的队列

    消息持久化

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

            代码段演示

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

  • 相关阅读:
    Java学习笔记 --- IO流
    Java多线程(6)----浅谈13个原子操作类
    护眼灯买哪种好,五款热门专业护眼台灯推荐
    win10下yolov7 tensorrt模型部署
    一幅长文细学TypeScript(一)——上手
    ESP32系列--存储器类型和XIP特性
    一个简单的可拖拽表格案例实现
    uni-app checkout(多选)radio(单选)选中之后样式不会出现钩子
    25 环形链表
    常见的损失函数
  • 原文地址:https://blog.csdn.net/weixin_44285713/article/details/127900160