RabbitMQ常见面试题

1.消息队列的作用与场景

消息队列简介

2.Channel 和vhost 的作用是什么?

Channel:减少TCP 资源的消耗。也是最重要的编程接口。

Vhost:提高硬件资源利用率,实现资源隔离。

可参考:认识RabbitMQ

3.RabbitMQ 的消息有哪些路由方式?适合在什么业务场景使用?

Direct、Topic、Fanout

可参考:认识RabbitMQ

4.交换机与队列、队列与消费者的绑定关系是什么样的?多个消费者监听一个队列时,消息会重复消费吗?

(1)交换机与队列、队列与消费者的绑定关系都是多对多。

(2)当一个队列有多个消费者时,会采用轮询方式平均分发,不会重复消费。

5.无法被路由的消息如何处理?

可以选择丢弃或用备份交换机(alternate-exchange)接收。

6.消息在什么时候会变成Dead Letter(死信)?

(1)消息过期;

(2)消息超过队列长度或容量;

(3)消息被拒绝并且未设置重回队列。

7.RabbitMQ 如何实现延迟队列?

(1)基于数据库+定时任务;

(2)或者消息过期+死信队列;

(3)延迟队列插件。

8.哪些情况会导致消息丢失?怎么解决?

从消息发送的整个流程分析:RabbitMQ的可靠性投递

9.一个队列最多可以存放多少条消息?

取决于硬件设备。

10.可以用队列的x-max-length 最大消息数来实现限流吗?例如秒杀场景。

不能,因为会删除先入队的消息,这样是不公平的。

11.如何提高消息的消费速率?

增加消费者数量。

12.AmqpTemplate 和RabbitTemplate 的区别?

Spring AMQP 是Spring 整合AMQP 的一个抽象。Spring-Rabbit 是一个实现。

13.如何保证消息的顺序性?

一个队列只有一个消费者。

14.MQ选型分析

可根据以下因素进行比较与权衡:

使用和管理:API、与Spring集成、管理控制台、权限、安全、监控、扩展性、社区支持等。

性能:并发性、消息吞吐量、消息堆积能力等。

功能:事务性消息、顺序性消息、消息重试、死信队列、优先级队列、延迟队列等。

15.设计一个MQ的思路

最基本的是要能支持消息的发送和接收,需要涉及到网络通信就一定会涉及到NIO;

消息的可靠性存储(持久化方式);

消息的有序性;

是否支持事务消息;

消息收发的性能,对高并发大数据量的支持;、

消息的确认机制,如何避免消息重发;

是否支持集群;

是否支持多协议;

是否跨语言。

你可能感兴趣的:(消息队列)