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)

相关推荐

  • HBase如何实现保存异步

    技术HBase如何实现保存异步这篇文章主要介绍HBase如何实现保存异步,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 批量操作 如何提交任务?不管是单条数据 还是 批量数据 都是异步执行2 批

    攻略 2021年12月8日
  • 怎样用原生的urllib2+httplib请求Https

    技术怎样用原生的urllib2+httplib请求Https本篇文章给大家分享的是有关怎样用原生的urllib2+httplib请求Https,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,

    攻略 2021年12月4日
  • 知识也是有质量的

    技术知识也是有质量的 知识也是有质量的关键字
    知识搬运工、知识提炼者、知识结晶、知识孤岛、知识宫殿
    何为知识搬运工
    知识搬运工是指那些通过阅读将作者的知识搬运到自己脑子里的一群人,他们不求理解,只求记忆

    礼包 2021年10月26日
  • 台湾云服务器租用选择台湾云服务器的优势

    技术台湾云服务器租用选择台湾云服务器的优势随着现在亚太地区海外云服务器的火爆,现在台湾云服务器的需求量也大增,下面就来谈谈选择台湾云服务器的五大理由更好的正常运行时间和可用性 与传统VPS不同,云服务器的可用性不取决于单

    礼包 2021年10月20日
  • c#怎么调用SSIS Package将数据库数据导入

    技术c#怎么调用SSIS Package将数据库数据导入本篇内容主要讲解“c#怎么调用SSIS Package将数据库数据导入”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c

    攻略 2021年11月24日
  • 怎么煮挂面,如何煮面条,怎么煮面条

    技术怎么煮挂面,如何煮面条,怎么煮面条随便什么锅,只要能让水滚的就行(电饭煲也行),水滚后放面条(一般100克一碗面的样子,大碗可装500克水的),再就是加盐、加点生抽、味精就行了,见差不多了就尝一尝看有没有熟,这样最保

    生活 2021年10月26日