RabbitMq学习笔记(八)面试常见问题

本文介绍了RabbitMQ中的关键概念,如Channel用于减少TCP资源消耗,Vhost实现资源隔离。消息路由方式包括Direct、Topic和Fanout,适用于不同业务场景。交换机与队列、队列与消费者绑定为多对多,多消费者时消息通过轮询分发,不重复消费。死信消息产生于过期、超出队列限制或被拒绝不重回队列的情况。延迟队列可通过消息过期或死信队列实现。消息丢失可能发生在发送流程中,可通过消息确认机制防止。队列大小取决于硬件,x-max-length不适合限流。提高消费速率可增加消费者数量。AmqpTemplate与RabbitTemplate分别是SpringAMQP的抽象和实现。确保消息顺序性则需要单一消费者。MQ选型考虑因素包括API、性能、功能等。设计MQ需考虑消息发送、存储、顺序性、事务性、性能、集群支持等要素。

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

RabbitMq学习笔记(一)消息中间件简介

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

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

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

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;

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

消息的有序性;

是否支持事务消息;

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

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

是否支持集群;

是否支持多协议;

是否跨语言。

参考链接:https://hujinyang.blog.youkuaiyun.com/article/details/100171256

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值