-
消息队列的作用与使用场景
要点:关键词+应用场景 -
Channel 和 vhost 的作用是什么
Channel:减少 TCP 资源的消耗。也是最重要的编程接口。
Vhost:提高硬件资源利用率,实现资源隔离。 -
RabbitMQ 的消息有哪些路由方式?适合在什么业务场景使用?
Direct、Topic、Fanout -
交换机与队列、队列与消费者的绑定关系是什么样的?
-
无法被路由的消息,去了哪里?
- 直接丢弃。
- 备份交换机(alternate-exchange)接收。
-
消息在什么时候会变成 Dead Letter(死信)?
- 消息过期;
- 消息超过队列长度或容量;
- 消息被拒绝并且未设置重回队列
-
RabbitMQ 如何实现延迟队列?
- 基于数据库+定时任务;
- 消息过期+死信队列;
- 延迟队列插件。
-
哪些情况会导致消息丢失?怎么解决? 哪些情况会导致消息重复?怎么解决?
从消息发送的整个流程来分析。 -
可以用队列的 x-max-length 最大消息数来实现限流吗?例如秒杀场景。
不能,因为会删除先入队的消息,不公平。 -
如何提高消息的消费速率?
创建多个消费者。 -
AmqpTemplate 和 RabbitTemplate 的区别?
Spring AMQP 是 Spring 整合 AMQP 的一个抽象。Spring-Rabbit 是一个实现。 -
如何动态地创建消费者监听队列?
通过 ListenerContainer
container.setQueues(getSecondQueue(), getThirdQueue()); //监听的队列
-
Spring AMQP 中消息怎么封装?用什么转换?
Message,MessageConvertor -
如何保证消息的顺序性?
一个队列只有一个消费者 -
RabbitMQ 的集群节点类型?
磁盘节点和内存节点 -
如何保证 RabbitMQ 的高可用?
HAProxy(LVS)+Keepalived -
大量消息堆积怎么办?
多创建几个消费者同时消费 -
MQ 选型分析
使用和管理
API、与 Spring 集成 管理控制台,权限、安全、监控 扩展性
社区支持
性能 并发性
消息吞吐量 消息堆积能力
功能
事务性消息
顺序性消息
消息重试
死信队列
优先级队列
延迟队列
可靠+可用 集群
持久化 消息同步 -
设计一个 MQ,你的思路是什么?
存储与转发。
存储:内存:用什么数据结构?
磁盘:文件系统?数据库?
通信:通信协议(TCP HTTP AMQP )?一对一?一对多? 推模式?拉模式?