什么是消息队列? 消息队列是一个使用队列来通信的组件。 为什么需要消息队列? 互联网快速发展导致业务不断扩张,技术架构需要不断地提升,所以需要消息队列来实现,异步处理、服务解耦、流量控制 消息队列的两种模型:队列模型、发布/订阅模型 队列模型每条消息只能被一个消费者消费,而发布/订阅模型就是为让一条消息可以被多个消费者消费而生的,队列模型也可以通过消息存储至多个队列来解决一条消息被多个消费者消费的问题,但是会造成数据的冗余,发布/订阅模型兼容队列模型,当只有一个消费者的情况下和队列模型基本一致。 如何保证消息的可靠性? 分别从生产者、消费者、Broker三个方面考虑,需要三方配合 如何处理重复消息? 通过幂等处理重复消息,就能避免消息被多此处理后影响最终结果的问题 如何实现有序性? 部分有序我们就可以将Topic内部划分成我们需要的队列数,把消息通过特定的策略发往固定的队列中,然后每个队列对应一个单线程处理的消费者。这样即完成了部分有序的需求,又可以通过队列数量的并发来提高消息处理效率。如果要保证消息的全局有序,首先只能由一个生产者往Topic发送消息,并且一个Topic内部只能有一个队列(分区)。消费者也必须是单线程消费这个队列。这样的消息就是全局有序的。 如何处理消息堆积? 综合来讲需要排查消费缓慢的原因,具体问题具体分析