RabbitMQ常见面试题回答重点
文章目录
- 什么是消息队列?
- 为什么需要消息队列
- 消息队列的模型
- 消息队列常见名词
- 如何保证消息不丢失?(可靠性)
- 如何保证消息不重复/业务幂等性
- 如何保证消息有序性
- 如何处理消息堆积
- 消息队列设计为推送还是拉取 / 推拉模式优点
- 无法路由的消息怎么处理的
- 消息什么时候会进入死信交换机
- 死信队列有哪些应用
- 聊一聊AMQP协议
- RabbitMQ的事务机制
- RabbitMQ核心名词
- RabbitMQ中的routing key 以及 binding key 最大长度是多少字节?
- RabbitMQ工作模式
- RabbitMQ集群模式
- RabbitMQ延迟队列实现
什么是消息队列?
- 异步通信
为什么需要消息队列
-
异步处理
-
服务解耦
-
流量控制
消息队列的模型
- 队列模型
- 发布/订阅 模型
消息队列常见名词
-
生产者 / 消费者 /Broker / 队列 /主题
-
消息确认
-
死信队列
-
命名服务
-
集群
-
分区和队列
-
消费组
如何保证消息不丢失?(可靠性)
- 生产者消息确认
- 消费者消息确认
- 消息持久化
如何保证消息不重复/业务幂等性
- 消息ID去重
- 结果业务逻辑优化
如何保证消息有序性
- 顺序队列(RabbitMQ)
- 分区与顺序键(Kafka、RocketMQ)
如何处理消息堆积
- 排除代码原因例如BUG
- 限流 / 降级
- 消费者扩容
- 批量消费
- 异步消费
消息队列设计为推送还是拉取 / 推拉模式优点
- 推:实时
- 拉:限流
无法路由的消息怎么处理的
- 丢弃
- 指定备份交换机(死信交换机/队列)
- Return Listener 回退机制
消息什么时候会进入死信交换机
- 被拒绝且requeue设置为false
- 过期 ttl到期
- 超出max-length
死信队列有哪些应用
- 拒绝消息
- 处理类似超时订单的业务
- 队列限流
- 实现延迟队列
聊一聊AMQP协议
- 应用层
- 面向消息、异步
- 五大组成
- 交换机类型
- 可靠传输
- 对比MQTT
- 对比JMS
RabbitMQ的事务机制
- 消息发送原子性
- 发布确认模式
- 性能瓶颈
RabbitMQ核心名词
- 生产 /消费
- 交换机
- 队列
- Binding
- Routing Key
RabbitMQ中的routing key 以及 binding key 最大长度是多少字节?
- 255
RabbitMQ工作模式
- simple
- work
- 发布 /订阅
- routing
- topic
- rpc
- 发布 /确认
RabbitMQ集群模式
- 标准集群
- 镜像集群
- 联邦集群
RabbitMQ延迟队列实现
- 死信队列+TTL
- 延迟消息插件