rabbitmq的持久化_rabbitmq的六种模式

rabbitmq的持久化_rabbitmq的六种模式2.RabbitMq-持久化

大家好,又见面了,我是你们的朋友全栈君。

RabbitMq-消息持久化

问题:怎样保证消息不因生产者gg而丢失
我们知道了如何在消费者的角度保证消息不丢失,但如果生产者gg了呢,消息同样会丢失,生产者gg后会默认丢弃所有的消息,除非告诉它某些消息是不能丢失的。

解决策略:消息持久化
使用消息持久化,将消息保存到磁盘上,而不是内存中,即使生产者gg了,后面还可以通过读取磁盘来进行恢复。

要实现消息持久化,我们需要做两件事:从queue与message分别来标记持久化。

①首先:从queue角度标记为持久化

注意已经申明的队列不可以再次设置

1 /**
2 * @param queue the name of the queue
3 * @param durable true if we are declaring a durable queue (the queue will survive a server restart) 如果我们声明一个持久队列,则为true(队列将在服务器重启后继续存在)
4 * @param exclusive true if we are declaring an exclusive queue (restricted to this connection) 如果我们声明一个独占队列(仅限于此连接),则为true
5 * @param autoDelete true if we are declaring an autodelete queue (server will delete it when no longer in use) 如果我们声明一个自动删除队列,则为true(服务器将在不再使用时将其删除)
6 * @param arguments other properties (construction arguments) for the queue 队列的其他属性(构造参数)
7 */
8 boolean durable = true;
9 channel.queueDeclare("hello", durable, false, false, null);

声明队列时的第二个参数,设置为true。当然以上代码是有问题的,因为我们已经声明一个hello了,而且那个hello的持久化是false的,这里我们需要声明一个新的队列:queue_task

1 boolean durable = true;
2 channel.queueDeclare("task_queue", durable, false, false, null);

②从message的角度标记持久化
我们已经标记了queue为持久化,重启后会读取磁盘保存的消息,那么还需要将消息标记为持久化:通过设置MessageProperties的值为:PERSISTENT_TEXT_PLAIN

 1 channel.basicPublish(“”, task_queue,MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes()); 

好了现在我们已经实现消息持久化了。

注意:消息持久化并不能完全保证消息不丢失,级生产者需要将多个message保存到磁盘上,就在保存这个时间窗口上发生了意外,消息同样会丢失,尽管这个时间很短,但还是存在。不过话说回来,尽管这个持久化机制不能百分百地保证消息不丢失,但是做一些简单的任务还是够用的。

转载于:https://www.cnblogs.com/Mao-admin/p/10033678.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107180.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10cpu睿频怎么关闭_cpu睿频上不去

    win10cpu睿频怎么关闭_cpu睿频上不去笔记本非节能模式下默认开睿频,非常烫手。关闭睿频,步骤如下:打开注册表编辑器=>地址栏输入=>将值改为0=>打开——>——>——>——>——>设置为非要打开睿频的话,笔记本建议使用高性能高效率,频率高,温度相对低,算是一个折中的方案。台式机不清楚,自行测试,可以使用CoreTemp监控温度和频率。…

    2025年11月25日
    5
  • springboot springcloud项目实战(阿里云如何搭建服务器)

    https://blog.csdn.net/u010938610/article/details/79282624

    2022年4月15日
    51
  • idea设置注解格式_idea添加类注释

    idea设置注解格式_idea添加类注释开发过程中经常看到源码中的注释,感叹大佬的注释为何写得那么清新脱俗,决定简单研究一下IDEA中的注释本文主要分为三个部分:注释的显示状态切换如何在注释中添加超链接注释状态切换:之前看大佬们的注释都是:而我的注释:为何源码中别人的注释和自己写的注释显示效果完全不一样呢其实是设置问题而已(今天才知道…尴尬了)点击图中的铅笔就可以切换为注解源码,效果如下:再点击图中左上角的图标就切换回了注释的阅览视图…

    2022年9月27日
    3
  • 视觉SLAM技术_解读团体技术

    视觉SLAM技术_解读团体技术近年来,SLAM技术取得了惊人的发展,领先一步的激光SLAM已成熟的应用于各大场景中,视觉SLAM虽在落地应用上不及激光SLAM,但也是目前研究的一大热点,今天我们就来详细聊聊视觉SLAM的那些事儿。视觉SLAM是什么?视觉SLAM主要是基于相机来完成环境的感知工作,相对而言,相机成本较低,容易放到商品硬件上,且图像信息丰富,因此视觉SLAM也备受关注。目前,视觉SLAM可…

    2022年9月27日
    3
  • “ORA-01017(:用户名/口令无效; 登录被拒绝)”解决办法「建议收藏」

    “ORA-01017(:用户名/口令无效; 登录被拒绝)”解决办法「建议收藏」报错:ORA-01017(:用户名/口令无效;登录被拒绝)1.打开CMD命令窗,输入sqlplus/assysdba1)修改密码SQL>alteruser用户名identifiedby密码2)用户被锁定,解锁ALTERUSERusernameACCOUNTUNLOCK;再次登录验证,成功…

    2022年6月1日
    231
  • navicat的注册码_navicat密钥注册

    navicat的注册码_navicat密钥注册Navicat相关注册码用户名和组织随便起。注册码如下 –NavicatforSQLServerV10.0.10NAVD-3CG2-6KRN-IEPMNAVL-NIGY-6MYY-XWQENAVI-C3UU-AAGI-57FW -NavicatPremium注册码NAVJ-E6YF-JULL-KKIGNAVE-BOCL-CE3X-TAGYNAVC-KAIA-NU5I-SPOXNAVL-…

    2022年10月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号