本文主要是介绍【八股】消息中间件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
通用MQ问题
使用场景
- 异步发送(验证码、短信、邮件)
- MYSQL和Redis,ES之间的数据同步
- 分布式事务
- 削峰填谷
消息的重复消费问题
👉定义:消费者已经消费了消息,但是可能由于网络抖动或者消费者挂了导致ack回执没有发送给MQ
👉解决方案
- 为每条消息设置一个唯一的标识
id
,在消费者消费消息时,验证这个业务id
是否存在,如果存在则说明已经消费过,不要再消费了。 - 幂等方案:添加redis分布式锁、数据库锁(乐观锁、悲观锁)
RabbitMQ
消息发送的一般流程
- 消息的发送者(publisher)将消息发送给交换机(exchange)
- 由交换机路由到各个消息队列(queue)
- 再由消费者(consumer去消费消息)。
如何保证消息不丢失
👉开启生产者确认机制Publisher Confirm
,如果消息发送失败会返回不同的ack【比如step1失败,响应nack publish-confirm
;step2失败,响应
这篇关于【八股】消息中间件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!