• 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. }

  • 相关阅读:
    torch.sum()——dim参数
    机器学习模型验证:被低估的重要一环
    Spring Cloud父子容器及容器的启动源码
    2022杭电多校6 L - Loop
    SD-WAN不得不说的优势
    k8s使用ECK(2.4)形式部署elasticsearch+kibana-http协议
    合宙ESP32C3之Arduino、MicroPython上手
    IDEA(2023)修改默认缓存目录
    记一次Redis Cluster Pipeline导致的死锁问题
    RHCSA相关知识点
  • 原文地址:https://blog.csdn.net/weixin_44285713/article/details/127900160