zoukankan      html  css  js  c++  java
  • 消息队列

    消息队列 - 关于消息队列的消息丢失问题的一点思考

      

      使用消息中间件必须面对的两大问题 - 消息丢失 和 消息重复。

       消息丢失的解决办法主要是通过消息重发的补偿手段,消息重发后导致消息重复,消息重复需要使用幂等解决。

       

      消息从生产到消费,一般需要通过如图3个阶段。成熟的消息中间件的设计者都会考虑这个问题。rabbitmq在生产阶段,一般会有回调确认机制,存储阶段,会有持久化配置策略,消费阶段会有成功消费后的确认机制。spring 在封装rabbitmq时,默认的配置策略很人性化,存储阶段默认配置成持久化,消费阶段默认没有异常后再向mq确认成功消费。

      问题在于是否在生产消息时要人为保证百分之一百确保消息成功?因为即时使用了回调机制,重试策略,在极端情况下还是会丢失消息的。

      如果要保证百分之一百成功,需要引入数据库,设计上比较复杂, (参考学习资料)

      

       如果每次使用消息中间件,都保证百分之一百成功,整体系统会越来越复杂。

      因此,在核心重要业务上,如金钱相关的业务,就一定要保证百分之一百,

      在非核心业务上,可以使用简单的重试策略,重试几次,发送数据,防止网络导致的消息丢失。

      重点在于,一定要先保证业务数据(如订单数据)入库成功,再去发送消息到mq供其他消费者消费。

      这样即时发送消息到mq时丢失了,也可以事后查库补发

      如果有错误,欢迎斧正。

    人生没有彩排,每一天都是现场直播
  • 相关阅读:
    18个功能强大的HTML5 和JavaScript游戏引擎库
    10 个超棒的 jQuery 视频插件
    HTML5播放视频音频
    CSS代码重构与优化之路
    推荐10款web前端的 HTML5 开发框架和开发工具
    JS中日期相关函数
    技术笔记1:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password)
    图解HTTP阅读笔记(1)-网络基础TCP/IP
    框架和设计模式的区别
    SSH与MVC
  • 原文地址:https://www.cnblogs.com/timfruit/p/12634579.html
Copyright © 2011-2022 走看看