Java面试题-消息队列

消息队列

1. 消息队列的使用场景

六字箴言:削峰、异步、解耦

  • 削峰:接口请求在某个时间段内会出现峰值,服务器在达到峰值的情况下会奔溃;通过消息队列将请求进行分流、限流,确保服务器在正常环境下处理请求。
  • 异步:提供对外接口限制响应时间在5s内,接口需要校验数据、数据转换、入库等操作,通常情况下响应时间大于5s;通过消息队列将数据转换、入库操作从对外接口拆分出来,对外接口确保数据校验通过即可。
  • 解耦:代码逻辑需要调用其他系统的保存接口,由于无法保证其他系统的稳定性,又不让本地代码由于其他系统的问题而抛出异常;此时通过消息队列将调用其他系统的接口从原有代码中剥离出来,使用消息队列通知。降低代码耦合度。

2. 消息的重发补偿解决思路

确保幂等性的前提下,进行重发。

3. 消息的幂等性解决思路

利用数据库的唯一索引进行数据唯一性的判断,保证数据处理完成后,后续同样的请求无法再次处理。

4. 消息的堆积解决思路

排查消息是在Broker端还是消费者端。

Broker端堆积需要排查消息队列中间件相关问题。

消费者端需要确认消费耗时是否正常:

1:若消费耗时不正常,则排查业务代码是否出现异常。

2:若消费耗时正常,则考虑调大消费线程或扩容消费节点。

5. 自己如何实现消息队列

核心思想还是基于队列先进先出的特性,进行设计。

具体可以参考如下文章:https://blog.csdn.net/Tyson0314/article/details/128698643

6. 如何保证消息的有序性

根据数据的唯一标识,将相同的数据放到同一个消费的地方,只要消费者端有序消费即可保证消息的有序性。

猜你喜欢

转载自blog.csdn.net/qq_36986510/article/details/129045760