[rank_math_breadcrumb]

编程总结 – 消息队列

消息队列传递形式

  1. 点对点(Point – to – Point, P2P)
    • 特点:消息生产者发送消息到一个特定的队列,一个消费者从队列中获取消息。消息一旦被消费,就会从队列中移除。这种模式下,队列就像一个信箱,每个消息只被一个消费者处理,适合任务分发且只需要一个执行者的场景。
    • 示例场景:订单处理系统中,订单消息发送到订单处理队列,一个订单处理服务从队列中获取订单并进行处理。
  2. 发布/订阅(Publish/Subscribe, Pub/Sub)
    • 特点:消息生产者(发布者)将消息发送到主题(Topic),多个消息消费者(订阅者)可以订阅该主题。每个订阅者都能接收到主题中的所有消息副本。适合需要将消息广播给多个不同服务或模块的场景。
    • 示例场景:股票行情系统,行情数据发布到“股票行情”主题,多个投资分析服务、交易系统等订阅该主题获取行情数据。

常用框架和组件

(一)RabbitMQ

  1. 简介:是一个开源的消息代理软件,支持多种消息协议,如AMQP、STOMP、MQTT等。它以可靠性、灵活性和可扩展性著称,被广泛应用于企业级应用集成。
  2. 特点
    • 支持多种协议:可以与不同类型的客户端进行交互,满足多样化的应用场景。
    • 灵活的路由机制:通过Exchange(交换机)和Queue(队列)之间的绑定关系,实现灵活的消息路由策略。
    • 高可用性:支持集群部署,通过镜像队列等机制保证消息的高可用性和数据一致性。
  3. 应用场景:适用于对可靠性要求极高,需要处理复杂消息路由和高并发场景的系统,如金融交易系统、电商订单处理系统等。

(二)Kafka

  1. 简介:最初由LinkedIn开发,是一个分布式流处理平台,主要用于处理高吞吐量的实时数据流。它将消息持久化存储在磁盘上,并通过分区和副本机制保证数据的可靠性和可扩展性。
  2. 特点
    • 高吞吐量:能够处理每秒数十万条消息的写入和读取,适合大数据量的实时处理场景。
    • 可扩展性:通过增加节点可以轻松扩展集群的处理能力,以应对不断增长的数据量。
    • 持久化存储:消息被持久化到磁盘,即使系统崩溃也不会丢失数据。
  3. 应用场景:常用于日志收集、监控数据处理、实时数据分析等场景,如电商平台的实时日志采集和分析系统。

(三)ActiveMQ

  1. 简介:是Apache出品的、最流行的,能力强劲的开源消息总线。它支持多种语言和协议,如Java、C、C++、Python等,协议包括AMQP、STOMP、OpenWire等。
  2. 特点
    • 跨语言支持:方便不同语言编写的应用程序之间进行消息通信。
    • 丰富的功能:支持多种消息传递模式,如点对点、发布/订阅等,还提供了消息持久化、事务处理等功能。
    • 轻量级:相对其他一些消息队列框架,ActiveMQ的资源消耗较小,适合在资源有限的环境中部署。
  3. 应用场景:适用于企业级应用开发,尤其是需要与多种不同技术栈的系统进行集成的场景,如传统企业的信息化系统集成。

(四)RocketMQ

  1. 简介:是阿里巴巴开源的分布式消息中间件,经历了阿里内部大规模业务场景的考验,具有高性能、高可用、高可靠等特点。
  2. 特点
    • 高性能:能够支持高并发的消息发送和消费,满足大规模业务场景的需求。
    • 分布式事务:提供了分布式事务支持,确保消息的最终一致性,适合对数据一致性要求较高的场景。
    • 易于管理:提供了丰富的管理工具,方便对消息队列进行监控、运维和管理。
  3. 应用场景:适用于电商、金融等对消息处理性能和可靠性要求极高的行业,如电商的订单处理、库存管理等业务场景。
KAMI
KAMI
数据挖掘研究员,专注分享数据领域的技术和业务,以及逻辑、思维和方法论

发表回复

文章结构
相关文章