RabbitMq
- 面试问题
- 1、消息队列的作用和场景?
- 2、Channel和Vhost的作用是什么?
- 3、RabbitMQ的消息有哪些路由方式?适合什么业务场景?
- 4、交换机与队列、队列于消费者绑定关系如何?多个消费者监听一个队列,消息会重复消费吗?
- 5、无法被路由的消息,去了哪里?
- 6、消息在什么时候会变成Dead Letter(死信)?
- 7、如果一个项目代码要从多个服务器接收消息来消费,怎么做?如果一个项目要发送消息到多个服务器,怎么做?
- 8、RabbitMq如何实现延迟队列?
- 9、哪些情况会导致消息丢失?怎么解决?
- 10、一个队列最多可以存放多少条消息?
- 11、可以用队列的x-max-length最大消息数来实现限流?例如秒杀场景
- 12、如何提高消息的消费速率?
- 13、AmqpTemplate和RabbitTemplate的区别?
- 14、如何动态的创建队列和消费者?
- 15、Spring AMQP中消息怎么封装?用什么转换?
- 16、如何保证消息的顺序性?
- 17、RabbitMQ的集群节点类型?
- 18、如何保证RabbitMQ的高可用?
- 19、大量消息堆积怎么办?
- 20、设计一个MQ,你的思路是什么?
面试问题
1、消息队列的作用和场景?
用在异步、解耦、削峰的业务中
2、Channel和Vhost的作用是什么?
Channel:减少TCP资源消耗。也是重要的编程接口。
Vhost:提高资源利用率,实现资源隔离。
3、RabbitMQ的消息有哪些路由方式?适合什么业务场景?
Direct、Topic、Fanout
Direct:直连交换机,用于等值匹配
Topic:主题交换机,模糊匹配,用于不确定的业务场景
Fanout:广播交换机
4、交换机与队列、队列于消费者绑定关系如何?多个消费者监听一个队列,消息会重复消费吗?
多对多关系。
不会重复消费,因为默认轮询(平均分发)
5、无法被路由的消息,去了哪里?
直接丢弃。可用备份交换机回收。
6、消息在什么时候会变成Dead Letter(死信)?
消息过期;
消息超过队列最大长度或最大容量。
消息被拒绝并且未被设置重回队列
7、如果一个项目代码要从多个服务器接收消息来消费,怎么做?如果一个项目要发送消息到多个服务器,怎么做?
定义多个ConnectionFactory,注入到消费者监听类Template。
8、RabbitMq如何实现延迟队列?
基于数据库+定时任务。
或者消息过期+死信队列;
或者使用RabbitMq延迟插件;
9、哪些情况会导致消息丢失?怎么解决?
10、一个队列最多可以存放多少条消息?
11、可以用队列的x-max-length最大消息数来实现限流?例如秒杀场景
不能。因为会删除最先入队列(对头)的消息,这不公平
12、如何提高消息的消费速率?
创建多个消费者。
13、AmqpTemplate和RabbitTemplate的区别?
Spring AMQP是Spring整合AMQP的一个抽象。Rabbit是一个具体实现。
14、如何动态的创建队列和消费者?
通过ListenContainer。
15、Spring AMQP中消息怎么封装?用什么转换?
Message、MessageConvertor
16、如何保证消息的顺序性?
一个队列只有一个消费者。
17、RabbitMQ的集群节点类型?
磁盘节点和内存节点
18、如何保证RabbitMQ的高可用?
HAProxy(LVS)+Keepalived
19、大量消息堆积怎么办?
1)重启(滑稽)
2)多创建几个消费者同时消费
3)直接清空队列,重发消息
20、设计一个MQ,你的思路是什么?
存储和转发。