【1.0】消息队列引入
【一】什么是消息队列
- 消息队列是一种基于"先进先出"(FIFO)原则的数据结构,用于在分布式系统中进行异步通信和解耦功能模块。
- 它提供了一种可靠的方式来传递和存储消息,确保消息在发送和接收之间的可靠性和顺序性。
【二】消息队列解决什么问题
【1】应用解耦
-
通过消息队列,可以将单体应用拆分成多个小功能模块,并使用消息进行数据交互。
-
不同的模块之间通过消息队列进行解耦,使得各个模块可以独立开发、部署和扩展。
【2】流量削峰
-
celery异步操作优化
-
当系统面临高并发情况下,消息队列可以用来平滑处理流量峰值。
-
例如,在秒杀场景中,大量用户同时发起秒杀请求可能会导致系统崩溃。
- 通过将秒杀请求放入消息队列中,然后慢慢消费这些请求,可以将并发压力分散,避免系统过载。
【3】消息分发
-
消息队列支持发布-订阅模式,允许多个消费者订阅同一个主题(Topic)。
-
当消息发布者发布消息时,所有订阅该主题的消费者都能接收到消息,实现了消息的分发和广播功能。
【4】异步消息
- 如果使用resful调用---》同步调用,慢
- 使用消息队列可以实现异步消息处理。
- 当一个服务发送调用请求后,可以继续处理其他事务,而不需要等待响应。
- 另一个服务在准备好数据后,将其放入消息队列中,然后异步从消息队列中获取并处理这些消息。
【三】常见的消息队列比较(RabbitMQ和Kafka)
-
RabbitMQ是使用Erlang语言编写的开源消息队列系统,支持多种编程语言客户端。
- 它具有较高的可靠性和稳定性,并且适合于大部分场景。
-
Kafka是由Apache Software Foundation开发的分布式流平台,用于处理高吞吐量的数据管道。
- 它主要用于处理流式数据,适合构建实时的数据流应用程序。
-
RabbitMQ在处理数据能力上较Kafka稍低,但更加可靠。
- Kafka的设计重点是高吞吐量和可容错性。
- 这些消息队列选择的依据取决于具体的应用场景需求。
- 如果需要处理高吞吐量的实时数据流,Kafka可能是更合适的选择。
- 如果需要强调可靠性和稳定性,则可以选择RabbitMQ。
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/17691733.html