RabbitMq怎么确保消息不丢失
发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,本篇内容主要讲解"RabbitMq怎么确保消息不丢失",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"RabbitMq怎么确保消息不丢失"吧!①生产阶段,生产
千家信息网最后更新 2024年11月17日RabbitMq怎么确保消息不丢失
正常情况下,我们使用 BasicPublish 方法发送消息到交换器上然后路由到队列上面,消费者还没进行消费,此时服务器重启了(队列、交换器使用默认的创建方式),会发生什么?答案是:消息丢失。原因很简单:消息在内存中,没有刷盘,并且,他们默认是非持久化的,服务重启之后,它们需要重新创建,消息自然就丢失! 还好,Rabbit提供持久化的机制,队列、交换器创建的时候, durable 属性设置为true,同时消息投递模式( delivery mode )设置为2,则消息标记成持久化。这样可以避免服务器重启消息丢失的情况。 由于发布操作不返回任何信息给生产者,那你怎么知道服务器是否已经持久化了持久消息到硬盘呢?服务器可能在把消息写入磁盘前就宕机了,消息因此而丢失! Rabbit提供两中解决方案, 事务 ,但是性能会大打折扣,而且会使生产者应用程序产生同步。生产环境一般不会采用;另外一种方案是 确认模式 。也很简单,消息路由给所有匹配的订阅队列中,之后会异步的告之生产者。使用channel.ConfirmSelect()方法,使信道开启确认模式。然后注入两个回调函数,ack和nack事件。 你可能会问,消费端消息怎么会丢失呢?Rabbitmq提供自动和手动确认消息,然后消息从队列中移除。如果 autoAck 为true,自动确认模式,服务器就会在消息发给消费端后自动将其出队。如果因为某些原因连接中断了,或者你的消费端应用发生了故障,那么消息就会丢失!
本篇内容主要讲解"RabbitMq怎么确保消息不丢失",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"RabbitMq怎么确保消息不丢失"吧!
①生产阶段,生产者创建消息,经过网络发送到rabbit服务器
②消息存储阶段,首先被发送到交换器然后经过路由算法,到达队列,等待被拉取消费
③消费阶段,消费者经过网络从rabbit服务器拉取消息进行消费
这三个阶段都有可能消息丢失,下面一一分析。
消息存储阶段
发送阶段
有。)
channel.BasicAcks += (sender, ev) =>
{
Console.WriteLine("消息已经确认收到" + ev.DeliveryTag);
};
channel.BasicNacks += (sender, ev) =>
{
Console.WriteLine("消息未确认" + ev.DeliveryTag);
};
消费阶段
通过把AutoAck设置为false,手工确认,告知服务器,消息已经处理了,可以进行消息出队删除。
channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);
consumer.Received += (model, ea) => { //dosometing channel.BasicAck(ea.DeliveryTag, false);//确认 };
小结:如果做了以上的处理,那么消息就不会跟你躲猫猫了。这里有性能的问题,消息持久化,是要刷到磁盘上的会影响投递速度,并且消息确认也会影响到消息投递速度。不基本上能够满足需求了。如果不能满足性能需求,可以使用其他方法,比如 在每次发送消息的时候,都包含应答队列的名称,这样消费者就可以回发应答以确认接受到了。如果消息应答未在合理时间范围内到达,生产者就重新发送消息。
到此,相信大家对"RabbitMq怎么确保消息不丢失"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
消息
消费
服务
服务器
队列
阶段
生产
生产者
交换器
方法
模式
性能
消费者
路由
内容
原因
情况
方案
时候
磁盘
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
java调用数据库插入信息
南沙区数据网络技术开发分类
路由器用到的网络技术
注意金融交易的网络安全
魔兽世界看服务器状态
网络安全性自身怎么做
数据库连接池满 报错日志
大数据的网络安全及防范措施
手机软件开发公司一般多少人
mysql数据库创建外键
高校网络安全 人才培养
查软件开发语言工具
车牌识别软件数据库
京东上的图片传到服务器上
gpu云服务器 挖矿
移动宽带安装完显示服务器不足
老头环服务器无法登录
数据库10054错误代码
pubmed数据库电脑版
自己用数据库
计算机网络技术高中学好什么
专业方向软件开发和软件测试
网络安全性自身怎么做
博山文件审批软件开发公司
斗罗大陆怎么查询斗罗服务器记录
广州工业网络安全
网络安全学什么技术
深圳盛世互联网科技有限公司
软件开发BOT
国家网络安全周目的