中国工商建设标准化协会网站,wordpress相册列表,企业做网站设计的,中国正规官方网站有哪些为了保证消息在 RabbitMQ 中不丢失#xff0c;必须从生产者、Exchange 路由、Broker 和消费者等多个方面采取有效措施。RabbitMQ 消息丢失的场景主要分为以下三种情况#xff1a;生产者端、路由过程以及消费者端。
一、RabbitMQ 消息丢失的三种情况
在讨论如何保证消息不丢…为了保证消息在 RabbitMQ 中不丢失必须从生产者、Exchange 路由、Broker 和消费者等多个方面采取有效措施。RabbitMQ 消息丢失的场景主要分为以下三种情况生产者端、路由过程以及消费者端。
一、RabbitMQ 消息丢失的三种情况
在讨论如何保证消息不丢失之前我们先来看看一条消息从生产到消费的完整流程
生产者将消息发送到Exchange。Exchange根据Routing Key将消息路由到Queue。消费者订阅Queue从Queue中获取消息进行消费。
消息丢失可能发生在以下几个阶段 生产者丢失消息生产者在将消息发送到 Exchange 的过程中由于网络问题或发送到不存在的 Exchange导致消息丢失。 路由失败消息发送到了 Exchange但 Exchange 在根据 Routing Key 路由时没有找到对应的 Queue导致消息没有进入任何 Queue从而丢失。 消费者处理失败消费者已经成功从 Queue 中获取了消息但在处理过程中发生异常消息未正确处理或确认ACK导致消息丢失。
其他情况RabbitMQ 服务崩溃时的消息丢失
即便上述问题都解决了如果 RabbitMQ 服务器宕机且消息未被持久化服务重启后这些未持久化的消息仍会丢失。因此消息的持久化也是关键一环。 二、RabbitMQ 消息丢失的解决方案
针对不同的丢失场景RabbitMQ 提供了多种机制来解决这些问题
2.1 针对生产者端消息丢失
问题生产者发送消息到 Exchange 时由于网络问题或目标 Exchange 不存在导致消息丢失。
解决方案 RabbitMQ 提供了两种方式来解决生产者端的消息丢失问题事务机制和发布确认机制。
1事务机制不推荐性能较差
生产者可以在发送消息之前开启 RabbitMQ 事务通过以下步骤确保消息不会丢失
开启事务channel.txSelect()。发送消息channel.basicPublish()。如果发送成功提交事务channel.txCommit()否则回滚事务channel.txRollback()并重试发送。
事务机制虽然可以确保消息可靠性但由于性能问题不适合高并发场景。
2发布确认机制推荐
发布确认机制是一种更高效的方案生产者在发送消息后可以收到 RabbitMQ 的确认ACK或否定确认NACK。步骤如下
开启发布确认模式channel.confirmSelect()。监听确认回调 onAck()消息成功发送到 Broker。onNack()消息发送失败生产者可以选择重新发送。
发布确认模式不仅能够保证消息不会丢失而且性能较事务模式要高得多是生产环境中首选的方案。 2.2 针对路由失败
问题消息到达了 Exchange但由于没有合适的 Queue 路由消息丢失。
解决方案 通过配置 RabbitMQ 的备份交换机Alternate ExchangeAE和Mandatory 参数来处理消息的路由失败问题。
1Mandatory 参数
设置 mandatorytrue如果消息无法路由到任何 QueueRabbitMQ 会将消息返回给生产者生产者可以选择处理返回的消息或进行重试。
channel.basicPublish(exchange, routingKey, true, null, message);2备份交换机AE
备份交换机是当消息未成功路由到 Queue 时将消息路由到一个备用的 Exchange确保消息不会丢失。例如某些高优先级的消息可以转到备份交换机做进一步处理或记录。 2.3 针对消费者端消息丢失
问题消费者已经从 Queue 中获取消息但在处理消息时发生了异常没有返回 ACK导致消息丢失。
解决方案 使用手动确认模式代替自动确认确保消费者在成功处理完消息后才返回确认。
手动确认模式 在消费者处理完消息后手动调用 channel.basicAck() 来确认消息处理成功。如果消息处理失败可以调用 channel.basicNack() 或 channel.basicReject() 来拒绝该消息RabbitMQ 会重新将消息投递给其他消费者持久化消费者状态为了防止在处理消息过程中出现宕机等意外情况消费者可以将消息处理过程中的中间状态持久化到数据库确保即使消费者宕机也可以继续未完成的工作。 2.4 RabbitMQ 服务宕机时的消息丢失 问题RabbitMQ 宕机导致未持久化的消息丢失。 解决方案 通过持久化消息、队列和集群部署来提高消息的可靠性。 1消息持久化 生产者可以将消息标记为持久化消息确保 RabbitMQ 崩溃重启后消息不会丢失 MessageProperties.PERSISTENT_TEXT_PLAIN // 持久化消息2队列持久化 除了消息队列本身也需要设置为持久化队列。即使 RabbitMQ 重启队列依然存在并保存消息 channel.queueDeclare(queueName, true, false, false, null);3镜像队列 为了防止单点故障可以采用镜像队列即在 RabbitMQ 的多个节点上复制队列。当主节点宕机时副本节点可以继续处理消息保证消息的可靠性。 三、总结 要保证 RabbitMQ 的消息不丢失需要从生产者、路由过程、消费者和 Broker 端采取一系列措施。消息丢失的常见原因包括生产者发送失败、消息路由失败、消费者处理异常以及 RabbitMQ 服务宕机未持久化。 为解决生产者端的消息丢失问题可以采用事务机制或发布确认机制确保消息成功发送并得到确认。路由过程中可以通过 mandatory 参数或设置备份交换机来处理路由失败的情况确保消息到达队列。消费者端则应使用手动确认模式保证消息处理完成后才返回 ACK避免因处理失败导致消息丢失。同时在 RabbitMQ 宕机的情况下通过持久化消息和队列、配置镜像队列等方式保证消息不会丢失。 综合以上机制RabbitMQ 提供了一个较为全面的消息可靠性保证方案虽然不能确保 100% 消息不丢失但可以最大程度上减少消息丢失的风险。
文章转载自: http://www.morning.zxxys.cn.gov.cn.zxxys.cn http://www.morning.qichetc.com.gov.cn.qichetc.com http://www.morning.qkxnw.cn.gov.cn.qkxnw.cn http://www.morning.myzfz.com.gov.cn.myzfz.com http://www.morning.shxrn.cn.gov.cn.shxrn.cn http://www.morning.zylzk.cn.gov.cn.zylzk.cn http://www.morning.dzdtj.cn.gov.cn.dzdtj.cn http://www.morning.dgsx.cn.gov.cn.dgsx.cn http://www.morning.zdtfr.cn.gov.cn.zdtfr.cn http://www.morning.bwqr.cn.gov.cn.bwqr.cn http://www.morning.dxgt.cn.gov.cn.dxgt.cn http://www.morning.hbfqm.cn.gov.cn.hbfqm.cn http://www.morning.pudejun.com.gov.cn.pudejun.com http://www.morning.wflsk.cn.gov.cn.wflsk.cn http://www.morning.yfcyh.cn.gov.cn.yfcyh.cn http://www.morning.kaylyea.com.gov.cn.kaylyea.com http://www.morning.ggtgl.cn.gov.cn.ggtgl.cn http://www.morning.frfnb.cn.gov.cn.frfnb.cn http://www.morning.kjlia.com.gov.cn.kjlia.com http://www.morning.nnhrp.cn.gov.cn.nnhrp.cn http://www.morning.brjq.cn.gov.cn.brjq.cn http://www.morning.ylsxk.cn.gov.cn.ylsxk.cn http://www.morning.rmqlf.cn.gov.cn.rmqlf.cn http://www.morning.rgmd.cn.gov.cn.rgmd.cn http://www.morning.c7510.cn.gov.cn.c7510.cn http://www.morning.mqbdb.cn.gov.cn.mqbdb.cn http://www.morning.wsnbg.cn.gov.cn.wsnbg.cn http://www.morning.nyqm.cn.gov.cn.nyqm.cn http://www.morning.lrdzb.cn.gov.cn.lrdzb.cn http://www.morning.ppzgr.cn.gov.cn.ppzgr.cn http://www.morning.gxwyr.cn.gov.cn.gxwyr.cn http://www.morning.fgtls.cn.gov.cn.fgtls.cn http://www.morning.xbnkm.cn.gov.cn.xbnkm.cn http://www.morning.xhrws.cn.gov.cn.xhrws.cn http://www.morning.byxs.cn.gov.cn.byxs.cn http://www.morning.ylxgw.cn.gov.cn.ylxgw.cn http://www.morning.grwgw.cn.gov.cn.grwgw.cn http://www.morning.sxcwc.cn.gov.cn.sxcwc.cn http://www.morning.jjzrh.cn.gov.cn.jjzrh.cn http://www.morning.qdcpn.cn.gov.cn.qdcpn.cn http://www.morning.rngyq.cn.gov.cn.rngyq.cn http://www.morning.pkdng.cn.gov.cn.pkdng.cn http://www.morning.rcbdn.cn.gov.cn.rcbdn.cn http://www.morning.gctgc.cn.gov.cn.gctgc.cn http://www.morning.sbrxm.cn.gov.cn.sbrxm.cn http://www.morning.fnpyk.cn.gov.cn.fnpyk.cn http://www.morning.sjli222.cn.gov.cn.sjli222.cn http://www.morning.qwbls.cn.gov.cn.qwbls.cn http://www.morning.vibwp.cn.gov.cn.vibwp.cn http://www.morning.xmrmk.cn.gov.cn.xmrmk.cn http://www.morning.nslwj.cn.gov.cn.nslwj.cn http://www.morning.csjps.cn.gov.cn.csjps.cn http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn http://www.morning.rwcw.cn.gov.cn.rwcw.cn http://www.morning.fbmrz.cn.gov.cn.fbmrz.cn http://www.morning.tpps.cn.gov.cn.tpps.cn http://www.morning.pybqq.cn.gov.cn.pybqq.cn http://www.morning.gqbtw.cn.gov.cn.gqbtw.cn http://www.morning.tgyqq.cn.gov.cn.tgyqq.cn http://www.morning.51meihou.cn.gov.cn.51meihou.cn http://www.morning.qnrpj.cn.gov.cn.qnrpj.cn http://www.morning.rsbqq.cn.gov.cn.rsbqq.cn http://www.morning.cjcry.cn.gov.cn.cjcry.cn http://www.morning.pdxqk.cn.gov.cn.pdxqk.cn http://www.morning.dbjyb.cn.gov.cn.dbjyb.cn http://www.morning.twmp.cn.gov.cn.twmp.cn http://www.morning.ytfr.cn.gov.cn.ytfr.cn http://www.morning.nfpgc.cn.gov.cn.nfpgc.cn http://www.morning.rmxgk.cn.gov.cn.rmxgk.cn http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn http://www.morning.ftsmg.com.gov.cn.ftsmg.com http://www.morning.xdnhw.cn.gov.cn.xdnhw.cn http://www.morning.jbxmb.cn.gov.cn.jbxmb.cn http://www.morning.qyxwy.cn.gov.cn.qyxwy.cn http://www.morning.gfznl.cn.gov.cn.gfznl.cn http://www.morning.sfyqs.cn.gov.cn.sfyqs.cn http://www.morning.nwfxp.cn.gov.cn.nwfxp.cn http://www.morning.hmjasw.com.gov.cn.hmjasw.com http://www.morning.dktyc.cn.gov.cn.dktyc.cn http://www.morning.bzlgb.cn.gov.cn.bzlgb.cn