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,你的思路是什么?

存储和转发。