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)
上一篇 2022年4月20日 下午11:40
下一篇 2022年4月20日 下午11:40


相关推荐

  • node-formidable详解

    node-formidable详解node formidable 详解

    2026年3月19日
    2
  • pix是什么意思(pixio)

    本文会介绍cGAN和pix2pix,并在TensorFlow中使用pix2pix模型。一、cGAN原理使用GAN可以无监督生成全新的图片,比如使用GAN生成MNIST数字,虽然可以生成数字,但是不能生成确定的数字。如果希望控制生成的结果,例如生成数字1,此时就要用到cGAN了。cGAN的全称为ConditionalGenerativeAdversarialNet…

    2022年4月12日
    84
  • RPC原理简述

    RPC原理简述RPC RemoteProced 远程过程调用 它是一种通过网络从远程计算机程序上请求服务 而不需要了解底层网络技术的思想 RPC 是一种技术思想而非一种规范或协议 常见 RPC 技术和框架有 应用级的服务框架 阿里的 Dubbo Dubbox GooglegRPC SpringBoot SpringCloud 远程通信协议 RMI Socket SOAP HTTPXML REST HTTPJSON 通信框架 MINA 和 Netty 目前流行的开源 RP

    2026年3月19日
    2
  • android 设备usb调试模式,如何打开Android设备的USB调试模式「建议收藏」

    android 设备usb调试模式,如何打开Android设备的USB调试模式「建议收藏」目前大部分刷机等工具都是采用Adb方式连接,所以需要您在设备上打开USB调试模式Android设备打开USB调试模式总共有三种不同方法,根据系统版本而不同,以下为Android所有系统版本对应的打开方法壹2.1~2.3.7系统打开方法:点击手机Menu键(菜单键),在弹出的菜单中选择设置(Setting),或在应用程序中找到设置程序点击进入进入设置界面的应用程序即可打开…

    2025年11月5日
    3
  • 多播;因特网组管理协议IGMP

    多播;因特网组管理协议IGMP多播 也能够称为 组播 在网络技术的应用并非非常多 网上视频会议 网上视频点播特别适合採用多播方式 IP 组播是一种通过使用一个组播地址将数据在同一时间以高效的方式发往处于 TCP IP 网络上的多个接收者的协议 你把数据包从一头放进去 网络就会试图将它们传递到想要得到它们的人那里 nbsp 由于假设採用单播方式 逐个节点传输 有多少个目标节点 就会有多少次传送过程 这样的方式显然效率极低 是不可取的

    2026年3月17日
    2
  • 如何从从官网下载各个版本的jquery「建议收藏」

    如何从从官网下载各个版本的jquery「建议收藏」许多前端的小伙伴们可能跟我一样有选择强迫症,对于一些工具、软件等都偏爱从官网下载,尽管许多非官方网站上已经有现成的,但还是从心理上感觉官网的更正规。如今的jquery版本已经是相当多了。在jquery官网的首页上只提供了为数不多的较为流行的版本供我们下载。但是出于各种情况的考虑,我们想要自己需要的某一版本该如何从官网获取呢?步骤也是相当简单,jquery官网虽然为了页面的简洁性并未在Downl…

    2022年5月25日
    39

发表回复

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

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