rabbitmq如何确保消息不丢失 chengtian

技术rabbitmq如何确保消息不丢失 chengtian rabbitmq如何确保消息不丢失 chengtian上篇写了掌握Rabbitmq几个重要概念,从一条消息说起,这篇来总结关于消息丢失让人头痛

rabbitmq如何确保消息不会丢失

在最后一部分,我写了几个关于掌握拉比质量的重要概念。本文从一条消息开始,总结了关于消息丢失的头痛问题。网络故障、服务器重启、硬盘损坏等。都会导致信息丢失。新闻从生产到消费的主要结果如下。

(1)在制作阶段,制作方创建一条消息,通过网络发送到兔子服务器。

(2)在消息存储阶段,消息首先发送到交换机,然后通过路由算法传递,到达队列,等待被拉取和消耗。

(3)消费阶段,消费者通过网络从兔子服务器拉消息进行消费。

消息丢失在所有三个阶段都是可能的,这将在下面逐一分析。

消息存储阶段

在正常情况下,我们使用BasicPublish方法将消息发送到交换机,然后将其路由到队列。在消费者消费之前,服务器重新启动(默认情况下创建队列和交换机)。会发生的是信息丢失。原因很简单:消息在内存中,默认不持久。服务重启后,需要重新创建,消息自然会丢失!

幸运的是,兔子提供了一种坚持的机制。创建队列和开关时,持久属性设置为true,消息传递模式设置为2,因此消息被标记为持久。这样可以避免丢失服务器重启消息。

发送阶段

由于发布操作不会向生产者返回任何信息,您如何知道服务器是否已将持久消息保存到硬盘上?在将消息写入磁盘之前,服务器可能已关闭,消息将会丢失!

是的。)

Rabbit提供了两种解决方案,事务,但是性能将大大降低,生产者应用程序将同步。一般不采用生产环境;另一种解决方案是确认模式。也很简单。消息被路由到所有匹配的订阅队列,然后它将被异步告知生产者。使用频道。确认选择()方法将频道打开确认模式。然后注入两个回调函数,ack和nack事件。

频道。BasicAcks=(发送方,ev)=

{

控制台。WriteLine('消息已确认收到' ev。delivery tag);

};

频道。基本确认=(发送方,ev)=

{

控制台。WriteLine('消息未确认' ev。delivery tag);

};

消费阶段

你可能会问,消费者端的信息怎么会丢失?Rabbitmq提供自动和手动确认消息,然后将消息从队列中删除。如果自动检查为真,该模式将被自动确认,并且服务器将在消息发送给消费者后自动取消消息队列。如果连接由于某种原因中断,或者您的消费应用程序失败,那么消息将会丢失!

通过将自动检查设置为假,手动确认并通知服务器消息已被处理,可以出列和删除。

频道。基本消费(queue: queueName,

自动检查:为假,

消费者:消费者);

消费者。接收=(型号,ea)=

{

//剂量计量

频道。BasicAck(ea。DeliveryTag,false);//确认

};

总结:如果你做了以上处理,那么消息就不会瞒着你了。这里有一个性能问题,消息持久性,就是刷到磁盘会影响传递速度,消息确认也会影响传递速度。基本满足不了需求。如果不能满足性能要求,可以使用其他方法,比如每次

作者:阿本

【官方QQ群:跟本玩NET(全)】:422315558

【官方QQ群二:和阿本玩C#(全):574187616

【官方QQ三组:和本一起玩ASP.NET(全)】:967920586

【官方QQ四组:Asp.Net芯跨平台技术开发(可选)】:806491485

【官方QQ五组:NET Core跨平台开发技术(可选)]: 1036896405

【网易云课堂】:https://学习。163 .com/provider/2544628/index。htm共享=2 shareid=2544628

【腾讯课堂】:https://abennet.ke.qq.com

【51CTO学院】:https://edu.51cto.com/sd/66c64

【微信公众号】:http://dwz.cn/ABenNET

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/154014.html

(0)

相关推荐

  • .NET Core 部署IIS无法启动Hangfire该怎么办

    技术.NET Core 部署IIS无法启动Hangfire该怎么办本篇文章为大家展示了.NET Core 部署IIS无法启动Hangfire该怎么办,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希

    攻略 2021年11月18日
  • tomcat环境变量正确无法启动(eclipse启动tomcat拒绝访问)

    技术如何解决eclipse配置Tomcat和Tomcat出现无效端口问题小编给大家分享一下如何解决eclipse配置Tomcat和Tomcat出现无效端口问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,

    攻略 2021年12月16日
  • 合并HTTP请求与并行HTTP请求哪个更快

    技术合并HTTP请求与并行HTTP请求哪个更快本篇内容介绍了“合并HTTP请求与并行HTTP请求哪个更快”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希

    攻略 2021年11月11日
  • Java中有哪些Spring面试题

    技术Java中有哪些Spring面试题本篇内容主要讲解“Java中有哪些Spring面试题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中有哪些Spring面试题”吧

    攻略 2021年10月29日
  • JavaScript中分号的一些细节

    技术JavaScript中分号的一些细节 JavaScript中分号的一些细节JavaScript 中的分号是可选的,加不加分号主要是个代码风格问题。一种风格是使用分号明确结束语句,即便这些分号不是必需

    礼包 2021年11月5日
  • C++怎么为模板参数定义概念

    技术C++怎么为模板参数定义概念这篇文章主要讲解了“C++怎么为模板参数定义概念”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++怎么为模板参数定义概念”吧!T.10:

    攻略 2021年11月24日