RabbitMQ(九)——消息持久化
RabbitMQ系列
RabbitMQ(九)——消息持久化
前言
对于交换机(exchange)与队列(queue)的持久化只需要将durable属性设置为true即可,当重启RabbitMQ服务后,交换机和队列都会恢复,但是当只有队列的durable属性设置为true时,重启后会造成消息丢失。
实现
首先是设置生产者的交换机和队列的持久化属性durable为true,再设置IBasicProperties.Persistent为true,发布时带上BasicProperties
//1.创建连接工厂
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "127.0.0.1",
UserName = "guest",
Password = "guest"
};
//2.创建连接
using (var connection = factory.CreateConnection())
//3.创建管道
using (var channel = connection.CreateModel())
{
//4.创建交换器
channel.ExchangeDeclare("exchange", "fanout");
channel.QueueDeclare("SMSqueue",true,false,false,null);
channel.QueueDeclare("SMAILqueue", true, false, false, null);
channel.QueueBind("SMSqueue", "exchange","",null);
channel.QueueBind("SMAILqueue", "exchange","",null);
//消息持久化
//IBasicProperties basicProperties = channel.CreateBasicProperties();
//basicProperties.Persistent = true;
string msg = ""; for (int i = 0; i < 10; i++)
{
msg = $"发布消息{i}";
var body = Encoding.UTF8.GetBytes(msg);
channel.BasicPublish("exchange", "", null, body);
Console.WriteLine($"发布成功:{msg}");
Thread.Sleep(1000);
}
Console.ReadKey();
}
可以看到10条消息写入成功

现在重启下RabbitMQ服务

可以看到上图中的消息在重启后没有消费就丢失了,下面进行消息的持久化,交换机和队列的durable都设置为true。
修改创建交换机代码,将默认的false设置为true,basicProperties.Persistent设置为true
//1.创建连接工厂
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "127.0.0.1",
UserName = "guest",
Password = "guest"
};
//2.创建连接
using (var connection = factory.CreateConnection())
//3.创建管道
using (var channel = connection.CreateModel())
{
//4.创建交换器
channel.ExchangeDeclare("exchange", "fanout",true);
channel.QueueDeclare("SMSqueue",true,false,false,null);
channel.QueueDeclare("SMAILqueue", true, false, false, null);
channel.QueueBind("SMSqueue", "exchange","",null);
channel.QueueBind("SMAILqueue", "exchange","",null); IBasicProperties basicProperties = channel.CreateBasicProperties();
basicProperties.Persistent = true; string msg = ""; for (int i = 0; i < 10; i++)
{
msg = $"发布消息{i}";
var body = Encoding.UTF8.GetBytes(msg);
channel.BasicPublish("exchange", "", basicProperties, body);
Console.WriteLine($"发布成功:{msg}");
Thread.Sleep(1000);
}
Console.ReadKey();
}
发布消息和重启之后都是是10条消息。

这样就完成了消息持久的设置了

RabbitMQ(九)——消息持久化的更多相关文章
- RabbitMQ(三):消息持久化策略
原文:RabbitMQ(三):消息持久化策略 一.前言 在正常的服务器运行过程中,时常会面临服务器宕机重启的情况,那么我们的消息此时会如何呢?很不幸的事情就是,我们的消息可能会消失,这肯定不是我们希望 ...
- 【python】-- RabbitMQ 队列消息持久化、消息公平分发
RabbitMQ 队列消息持久化 假如消息队列test里面还有消息等待消费者(consumers)去接收,但是这个时候服务器端宕机了,这个时候消息是否还在? 1.队列消息非持久化 服务端(produc ...
- RabbitMQ的消息持久化处理
1.RabbitMQ的消息持久化处理,消息的可靠性是 RabbitMQ 的一大特色,那么 RabbitMQ 是如何保证消息可靠性的呢——消息持久化. 2.autoDelete属性的理解. 1).@Qu ...
- RabbitMQ 的消息持久化与 Spring AMQP 的实现剖析
文章目录 1. 原生的实现方式 2. Spring AMQP 的实现方式 要从奔溃的 RabbitMQ 中恢复的消息,我们需要做消息持久化.如果消息要从 RabbitMQ 奔溃中恢复,那么必须满足 ...
- RabbitMQ之消息持久化(转)
原文地址 https://blog.csdn.net/u013256816/article/details/60875666/ 消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证 ...
- RabbitMq初探——消息持久化
消息持久化 前言 通过上一节,我们知道,有消息确认机制,保证了当消费者进程挂掉后,消息的不丢失. 但是如果rabbitmq挂掉呢?它的队列和消息都会丢失的.为了保证消息在rabbitmq挂掉重启后不丢 ...
- RabbitMQ之消息持久化
消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化. 为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exch ...
- RabbitMQ (九) 消息的参数详解
上篇文章讲了声明一个队列时的参数设置,这篇文章主要说一说发布消息时的参数设置. 发布消息时的完整入参是这样的: channel.BasicPublish ( exchange: "test_ ...
- RabbitMQ之消息持久化(队列持久化、消息持久化)
rabbitMQ不支持数据库的持久化,只支持内存以及文件持久化 https://blog.csdn.net/bwh0520/article/details/78746873 http://blog.y ...
- RabbitMQ入门_13_消息持久化
参考资料:https://www.rabbitmq.com/tutorials/tutorial-two-java.html 默认情况下,队列中的消息是不持久化的.如果 RabbitMQ 崩溃,队列中 ...
随机推荐
- TortoiseGit之私钥配置
1.使用git命令生成公钥和私钥 ssh-keygen -t rsa -C "git邮箱账号" 三次回车,即可在~/.ssh/ 生成密钥对 id_rsa id_rsa.public ...
- Blazor 组件库 BootstrapBlazor 中Message组件介绍
组件介绍 上一篇文章我们介绍了Alert组件,但是实际上Alert组件只能直接把内容加载到页面内,这个做不到当作提示使用. 所以我们还有一个新的组件Message.这个组件的样式几乎与Alert组件一 ...
- spring ai 函数调用
1.概要 我们使用AI大模型开发程序时,比如我需要查一下平台中有多少个客户.这个时候大模型肯定时不知道的,如果大模型不知道,他可能会回答不知道或者胡乱回答,这个时候就需要借助函数时调用来解决这些问题. ...
- docker 打包镜像过程
1.首先准备需要打成镜像的JAR包 2.编制Dockerfile文件 FROM docker.gf.com.cn/java:openjdk-8u292-arm64 MAINTAINER 8627905 ...
- Echarts 颜色管理
1.Echarts的颜色设计 Echarts的颜色的设置分为两种:色盘和具体颜色 色盘适合做全局设置,因为他里面有多个颜色,通俗的说色盘就是颜色预设值列表,色盘统一使用color属性进行配置. 而具体 ...
- PCB设计AD规则设置(按照嘉立创设置)
本文转载自https://blog.csdn.net/subtitle_/article/details/121648972 官方参考https://www.jlc.com/portal/vtechn ...
- R数据分析:网状meta分析的理解与实操
meta分析之前有给大家写过,但是meta分析只能比较两个方法.经常是被用来证明在现有研究中显示矛盾结果的干预方法到底有没有效的时候使用,通过证据综合得到某种干预到底有没有用的结论.但是如果我要证明好 ...
- 【人工智能】【Python】Anacond基础操作
# 001.在 Anaconda 中使用 Conda 管理 Python 环境 工具:Anaconda Prompt(Anaconda)| 请使用管理员权限运行 更新Anaconda conda up ...
- Win11右键显示更多选项设置教程
Win11如何设置右键显示更多选项?如果你觉得每次右键菜单,都是需要点击"显示更多选项"十分麻烦,那么可以通过设置,让其直接显示出现.那么应该如何操作呢?下面小编就为大家带来具体的 ...
- [转]ubuntu20.04使用dev-sidecar找不到安装证书
火狐.chrome等浏览器不走系统证书,火狐.谷歌浏览器必须在浏览器上安装证书 然后死活找不到证书,搜索了整个目录也没有. 原来是我的显示隐藏文件没打开.打开目录的"显示隐藏文件" ...