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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python基础(5)字典「建议收藏」

    python基础(5)字典「建议收藏」字典字典的key和value一一对应的,字典是可变的,也是有序的(python3.6版本开始字典有序),可迭代的增加元素当key不存在时,直接赋值a={"status"

    2022年7月28日
    4
  • 使用VScode配置Java环境—JDK-17

    使用VScode配置Java环境—JDK-17一、JDK的安装与环境配置1、在java的官网下载页面找到安装包进行安装。找到对应的操作系统,第一个是直接下载压缩包,第二个是下载一个下载器再安装,我是直接下的第一个。2、修改环境变量,先建立一个JAVA_HOME变量,将JDK的安装下载位置设为值。3、点击系统变量中的Path,然后点击编辑,然后把bin的路径填上。按道理来说其实填路径这一步,直接把bin的路径加到Path中也可以,但是网上好多教的都是做一个JAVA_HOME变量,我也不知道为啥。记得退出环境…

    2022年10月3日
    2
  • GHO文件转iso文件能启动安装

    GHO文件转iso文件能启动安装言:目前网上流传的gho转iso教程都是用ultraiso替换gho文件的方法,但是这种方法经过实际使用存在两个缺陷,1.只适用XP,超过800M的时候替换会提示升级DVD格式,但是升级之后会导致不能启动,不升级无法替换,2.不能有效的控制启动盘的来源,只能找别人做好的进行替换鉴于以上两点,有必要重新找个方法准备工具1.IT天空的PE制作工具下载地址2.win7的gho文件下载地址:3.winISO下载地址:http://lt2.mqego.com/soft1/winiso

    2022年7月13日
    22
  • CentOs6.5升级内核到3.0+[通俗易懂]

    CentOs6.5升级内核到3.0+[通俗易懂]1、查看内核版本 命令: uname -a 2、导入key 命令: rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 如果报SSL错误, 则需要更新网络安全服务 yum update nss3、安装elrepo的yum源命令:rpm -U…

    2022年6月13日
    28
  • 最流行的三大数据建模工具

    最流行的三大数据建模工具越来越多的业务,越来越多的信息化系统,让很多公司拥有了海量数据,但是分散的数据、隔离的系统,又形成了一个个数据孤岛。于是,为了利用好数据,各大公司纷纷建设了数据仓库,或者是最近升级为大数据平台之类的,但是,不同条线不同场景的数据又要如何整合到同一个仓库呢?数据模型就此应运而生,通过高度抽象的数据模型,整合各个源系统的数据,最终形成统一、规范、易用的数据仓库,进而提供包括数据集市、数据挖掘…

    2022年6月1日
    39
  • sql查询序列是否存在_oracle if判断是否为空

    sql查询序列是否存在_oracle if判断是否为空sql如下:selectsequence_namefromuser_sequenceswheresequence_name=’参数’需要注意的是oraclesequence参数必须转换成大写。例子:(这是使用simple框架实现)//判断oraclesequence是否已经存在publicstaticbooleanisSequenceExi…

    2022年10月10日
    4

发表回复

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

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