RabbitMQ面试题:如何解决消息的顺序问题? --- 2022-04-03
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ面试题:如何解决消息的顺序问题? --- 2022-04-03相关的知识,希望对你有一定的参考价值。
参考技术ARabbitMQ的消息顺序问题,需要分三个环节看待,发送消息的顺序、队列中消息的顺序、消费消息的顺序。
消息发送端的顺序,大部分业务不做要求,谁先发消息无所谓,如果遇到业务一定要发送消息也确保顺序,那意味着,只能全局加锁一个个的操作,一个个的发消息,不能并发发送消息。
RabbitMQ中,消息最终会保存在队列中,在同一个队列中,消息是顺序的,先进先出原则,这个由Rabbitmq保证,不同队列中的消息顺序,是没有保证的,例如:进地铁站的时候,排了三个队伍,不同队伍之间的,不能确保谁先进站。
在多个消费者消费同一个消息队列的场景,通常是无法保证消息顺序的。
例如:消息A、B、C按顺序进入队列,消费者A1拿到消息A、消费者B1拿到消息B, 结果消费者B执行速度快,就跑完了,又或者消费者A1挂了,都会导致消息顺序不一致。
解决消费顺序的问题,通常就是一个队列只有一个消费者
这样就可以一个个消息按顺序处理,缺点就是并发能力下降了,无法并发消费消息,这是个取舍问题。
MQ-面试题
参考技术A 优点:解耦,削峰,异步缺点:系统复杂度高(考虑一致性,重复消费,消息丢失)
activeMQ使用不多,没有大规模吞吐量场景,社区不活跃,不建议
RabbitMQ:小型公司可以考虑,支持稳定,活跃度高
RocketMQ:大公司,基础架构比较强
kafka:实时计算,日志采集等场景
消息顺序问题:消费者固定,比如kafka到一个指定partition。缺点是并发度较低,消费端出现异常会阻塞消费。理论程序应该保证消息的顺序,而不是靠消息中间件保证顺序。
消息重复问题:网络不可达会造成消息重复,比如发生的时候网络超时,生产者重新发了一次。消息重复无可避免,需要消费端幂等处理。
以上是关于RabbitMQ面试题:如何解决消息的顺序问题? --- 2022-04-03的主要内容,如果未能解决你的问题,请参考以下文章
Rabbitmq面试题总结,非常详细,杜绝标题党,不详细你打我,下次不写博客了
面试官心理分析+面试题剖析:消息队列+Redis 缓存+分布式系统等