预见猿份
主题
首页面试题模拟面试SQL练习在线工具关于我们老苗一对一私教学员评价
实战项目
零基础学习路线项目前置基础创新WMS项目Java微服务框架与实战云岚到家项目闪聚支付项目学成在线项目青橙电商项目JVM原理与实战调优分布式事务专题Java高频面试题MySQL从入门到精通Java数据结构与算法Java 并发编程(JUC)实战课程老苗一对一私教学员评价
blog我的会员
  • RabbitMQ 消息中间件实战

    • 课程介绍
    • 第一章 RabbitMQ 快速入门
    • 第二章 RabbitMQ 高级特性与业务实战
    • 第三章 RabbitMQ 集群运维







----- 到底线了 -----

第二章 RabbitMQ高级 ​

B站视频链接

1 消息可靠性 ​

1.1. 思路分析 ​

在昨天的练习作业中,我们改造了余额支付功能,在支付成功后利用RabbitMQ通知交易服务,更新业务订单状态为已支付。

但是大家思考一下,如果这里MQ通知失败,支付服务中支付流水显示支付成功,而交易服务中的订单状态却显示未支付,数据出现了不一致。

画板0

首先,我们一起分析一下消息丢失的可能性有哪些。

消息从发送者发送消息,到消费者处理消息,需要经过的流程是这样的:

画板1

消息从生产者到消费者的每一步都可能导致消息丢失:

  • 发送消息时丢失:

    • 生产者发送消息时连接MQ失败
    • 生产者发送消息到达MQ后未找到Exchange
    • 生产者发送消息到达MQ的Exchange后,未找到合适的Queue
    • 消息到达MQ后,处理消息的进程发生异常
  • MQ导致消息丢失:

    • 消息到达MQ,保存到队列后,尚未消费就突然宕机
  • 消费者处理消息时:

    • 消息接收后尚未处理突然宕机
    • 消息接收后处理过程中抛出异常

综上,我们要解决消息丢失问题,保证MQ的可靠性,就必须从3个方面入手:

  1. 保证生产消息的可靠性
  2. 确保MQ不会将消息弄丢
  3. 保证消费消息的可靠性

注意:使用MQ并不是所有场景对消息的可靠性要求都很高,比如上图中,支付成功短信通知的流程对消息可靠性要求就不高,通常都可以保证消息正常到达消费者,即使个别没有成功通知用户也不影响主体业务流程,所以在设计技术方案时一定要根据业务需求具体分析。

🔒会员方可继续阅读

试读到此结束,完整文档需开通会员,请花两分钟了解下我们

微信二维码微信扫码添加

添加老师微信开通会员:mrt_0607(备注:预见猿份)

探索者会员:59元,全站文档无障碍阅读,没有时间限制。

实践者会员:199元,全站文档+视频+源码资源,没有时间限制。

详细见会员权益

推广本站,也能免费获得会员 →









如果发现文档内容有错误或排版错乱,请及时联系站长老苗修改,不胜感激。联系我们
关于我们 | 隐私政策 | 豫ICP备2026003386号-4 | 豫公网安备41010202004008号
目录

本页无章节