Java面试题-RabbitMQ消息中间件

1.什么是RabbitMQ?

RabbitMQ就是基于amqp协议的一种消息队列技术,最主要的特点就是不需要确保提供者的存在与否,生产者只关心生产那些消息,消费者只关心消费哪些消息,实现了服务间的高度解耦

2.为什么使用MQ,MQ的优点

1.解耦:在一般的程序中,耦合度特别大,服务间的依赖特别强,比如有三个服务,服务A提供消息给服务BC,此时服务B不需要这个消息了,又来了一个服务D需要这个消息,那么提供者A就会手忙脚乱,无从下手,这样的话就会导致我们的程序很不好,所以用了消息队列之后服务A只需要发送消息,剩下一切不在过问,消费者BCD只需要消费消息,也不需要管是谁发来的消息,这样的话谁需要消息谁就来消费,谁不需要谁就不消费,耦合度大大降低.
2.异步:异步就指的是一个程序干这一件事,另一个程序干另外一件事,互不影响,一起做事效率极高,比如说我之前写的注册,注册功能有发邮件发短信,没有加消息队列之前,用户输入完信息注册会等一秒多,虽然时间不是很长,但是如果还有其他的服务的话时间累计起来就会很长,用户体验就会很差,因为是线性执行,一个一个来,加了消息队列以后,用户点注册,后台生产者发消息通知消费者发邮件发短信,点完注册秒回应,用户体验就会很好…这就是异步执行,消息队列的好处
3.削峰
降低高并发时服务器的压力

3.Kafka,ActiveMQ,RabbitMQ,RocketMQ有什么优缺点

4.MQ有哪些常见问题,如何解决

1.消息重复性问题:重复性问题的根本原因就是网络不可达,导致了消息重复发送,如果不解决就会发生消费者重复消费不必要的消息,所以必须解决,解决办法就是加一个日志表,记录消息,进行比对,如果发现消息已经存在了,就不重复消费,这样的话就让消费者无论接收多少条消息,只要消息是相同的就只消费一次,就解决了消息重复性的问题
2.消息顺序性问题:顺序性的问题就是我们想要让哪一个消息先发送哪一个后发送,因为队列是无序的,我们只能保证生产者-MQServer-消费者是一对一对一,这样就可以解决,但是这样会有一个问题,就是降低了吞吐量,降低了效率,所以另外的解决办法就是在我们的程序逻辑中进行顺序操作,从程序中解决问题,尽量让消息有序的生产消费…

5.RabbitMQ的应用场景

1.日志操作
2.异步的任务
3.定时任务
4.请求削峰

6.RabbitMQ的基本概念

是基于amqp协议的一种消息队列技术,特点就是,消费者不需要关心生产者的信息,生产者也不需要关心消费者的情况,生产者只负责生产消息,消费者只负责消费消息.实现了高度解耦

7.RabbitMQ的工作模式(五种)

1.简单模式:生产者生产消息到队列中,消费者随时监听消息队列,一旦有消息,就进行消费
2.worker模式:生产者生产消息到消息队列中,消费者可以有多个,比如两个消费者,默认的话是公平消费,一人一半,但是我们可以设置能者多劳,谁先抢到消息谁就消费,提高了效率
3.发布订阅模式:生产者将消息发送到broker,由交换机发送消息到绑定此交换机的每一个队列
4.路由模式:生产者发送消息给路由,路由通过路由key来判断发送到哪一个消息队列,然后消费者再进行消费
5.主题模式:在我理解就是路由模式的一种模糊查询,*代表后面可以有多个单词,#代表只能有一个单词

8.如何保证RabbitMQ的顺序性

RabbitMQ会有两个问题,一个是消息的顺序性问题,另一个就是消息的重复性问题

消息的顺序性问题解决:
1.我们要保证生产者-消息队列-消费者是一对一对一的关系
2.我们还可以在业务逻辑层去保证顺序

9.消息如何分发

正常情况下如果只有一个消费者,保证不重复消费的情况下进行单个消费,也可以通过路由实现多个消费者进行消费

10.消息怎么路由

1.fanout:如果交换机收到消息,则会发送到所有绑定的队列上
2.direct:如果路由键完全匹配,则就会将消息发送到对应的队列上
3.topic:主题,就相当于direct的一种模糊匹配,*代表有多个单词,#代表有一个单词

11.消息基于什么传输

一个TCP协议里面可以有无数个虚拟的信道,消息就会基于这些信道进行传输

12.如何保证消息不被重复消费

这就是消息队列的两大问题之一,重复消费的根本原因就是网络的不可达,解决办法:加一个日志表,里面记录下来已经被消费的消息的id,如果又来了一个这个id,则被视为已经消费过了,就不能再次消费,也就是保持消息的幂等性

13.如何保证消息正确的发送至RabbitMQ

将信道设置成confirm

14.如何确保消息接收方消费了消息

消息确认机制,消费者将收到的消息进行确认,只有确认完成了,队列中才能安全的删除这些消息

15.如何保证RabbitMQ消息的可靠传输

16.为什么不应该对所有的message都是用持久化机制

17.如何保证高可用?集群

18.如何解决延迟,过期问题,满了怎么处理,

19.设计MQ思路

猜你喜欢

转载自blog.csdn.net/weixin_44219219/article/details/112690613