【1.0】消息队列引入

发布时间 2023-09-10 19:41:41作者: Chimengmeng

【一】什么是消息队列

  • 消息队列是一种基于"先进先出"(FIFO)原则的数据结构,用于在分布式系统中进行异步通信和解耦功能模块。
  • 它提供了一种可靠的方式来传递和存储消息,确保消息在发送和接收之间的可靠性和顺序性。

【二】消息队列解决什么问题

【1】应用解耦

  • 通过消息队列,可以将单体应用拆分成多个小功能模块,并使用消息进行数据交互。

  • 不同的模块之间通过消息队列进行解耦,使得各个模块可以独立开发、部署和扩展。

【2】流量削峰

  • celery异步操作优化

  • 当系统面临高并发情况下,消息队列可以用来平滑处理流量峰值。

  • 例如,在秒杀场景中,大量用户同时发起秒杀请求可能会导致系统崩溃。

    • 通过将秒杀请求放入消息队列中,然后慢慢消费这些请求,可以将并发压力分散,避免系统过载。

【3】消息分发

  • 消息队列支持发布-订阅模式,允许多个消费者订阅同一个主题(Topic)。

  • 当消息发布者发布消息时,所有订阅该主题的消费者都能接收到消息,实现了消息的分发和广播功能。

【4】异步消息

  • 如果使用resful调用---》同步调用,慢
  • 使用消息队列可以实现异步消息处理。
  • 当一个服务发送调用请求后,可以继续处理其他事务,而不需要等待响应。
  • 另一个服务在准备好数据后,将其放入消息队列中,然后异步从消息队列中获取并处理这些消息。

【三】常见的消息队列比较(RabbitMQ和Kafka)

  • RabbitMQ是使用Erlang语言编写的开源消息队列系统,支持多种编程语言客户端。

    • 它具有较高的可靠性和稳定性,并且适合于大部分场景。
  • Kafka是由Apache Software Foundation开发的分布式流平台,用于处理高吞吐量的数据管道。

    • 它主要用于处理流式数据,适合构建实时的数据流应用程序。
  • RabbitMQ在处理数据能力上较Kafka稍低,但更加可靠。

    • Kafka的设计重点是高吞吐量和可容错性。
  • 这些消息队列选择的依据取决于具体的应用场景需求。
  • 如果需要处理高吞吐量的实时数据流,Kafka可能是更合适的选择。
  • 如果需要强调可靠性和稳定性,则可以选择RabbitMQ。

img