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


相关推荐

  • getmethod方法什么意思_getstring方法

    getmethod方法什么意思_getstring方法getMethod方法要注意的地方:类对象.getMethod(mName,HttpServletRequest.class,HttpServletResponse.class);第一个参数是mName“方法名称”第二个参数是“方法参数的类对象”//这个就是为什么他是.class的原因,为什么参数是类对象?因为这个是Java规定的举个例子  这是一个抽取出的通用的servlet(页面请求经过的第…

    2022年9月15日
    0
  • 永恒之蓝 wannacry_永恒之蓝病毒攻击原理

    永恒之蓝 wannacry_永恒之蓝病毒攻击原理1.直接关闭server服务打开cmd执行关闭server服务即可:netstopserver控制面板–管理工具–服务里手动关掉 2.防火墙限制445端口   3.打补丁【KB4012598】:http://www.catalog.update.microsoft.com/Search.aspx?q=KB4012598适用于WindowsXP32位…

    2022年10月16日
    7
  • python猪脸识别_没想到,这是一家AI公司

    python猪脸识别_没想到,这是一家AI公司*人工智能是什么?文/Yang2015年的博鳌论坛上,当时还在GGV投资的卓福民,给我推荐了名片全能王,一款可以在手机上管理名片的应用。我还记得他当时说:这就可以节省纸质名片了。它确实带来了便利,大量名片可以随身带着走、也能搜索要找的人。不过我从来没有想过,名片全能王的出品方,会是家人工智能公司。2020年度世界人工智能大会上,这家公司的创始人陈青山这么介绍自己:合合信息是一家一直从事AI大数据的…

    2022年6月21日
    33
  • JRtplib开发笔记(四):JRtplib的VS开发环境搭建以及Demo

    原博主博客地址:https://blog.csdn.net/qq21497936本文章博客地址:https://blog.csdn.net/qq21497936/article/details/84957708《JRtplib开发笔记(一):JRtplib简介、JThread库编译》:https://blog.csdn.net/qq21497936/article/details/8478…

    2022年4月17日
    49
  • 4g模块怎么使用_STM32库开发实战指南:基于STM32F4

    4g模块怎么使用_STM32库开发实战指南:基于STM32F4这部分一直再看,资料都已经整理好了,但是一直没有汇总。接下来就详细的看一下,GSM这部分是怎么实现的。

    2025年7月20日
    4
  • 精华网页代码

    精华网页代码1.oncontextmenu=”window.event.returnvalue=false”将彻底屏蔽鼠标右键<tableborderoncontextmenu=return(false)><td>no</table>可用于Table2.<bodyonselectstart=”returnfalse…

    2022年5月29日
    44

发表回复

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

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