赞
踩
消息队列是一种用于在不同应用程序之间传递消息的通信方式。它通常由一个中间件系统管理,允许应用程序发送、接收和处理消息,而无需直接连接或了解彼此的细节。
异步通信指的是消息的发送和接收是非阻塞的,发送方发送消息后不需要等待接收方的响应即可继续执行其他任务。接收方在消息到达时会进行处理。这种通信方式可以提高系统的并发性和响应速度,因为发送方无需等待接收方的响应,可以并行地处理其他任务。
削峰填谷是指利用消息队列平滑处理系统的峰值流量。在高负载时,消息队列可以缓冲请求,防止系统过载,即“削峰”;而在低负载时,系统可以从消息队列中获取消息并处理,保证资源的充分利用,即“填谷”。这种方式可以使系统在高峰和低谷时段之间进行平滑过渡,提高系统的稳定性和性能。
解耦指的是将系统中的各个组件之间的依赖关系降低到最小程度,使得各个组件可以独立地修改、更新或替换。在消息队列中,通过引入消息队列作为中间件,不同组件之间通过消息进行通信,从而实现了解耦。发送方和接收方之间不直接进行通信,而是通过消息队列进行消息的传递,使得各个组件之间的关联性降低,系统更易于维护、扩展和升级。
P2P模式包含三个角色:消息队列(Queue),发送者(Sender),接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。
P2P的特点
如果希望发送的每个消息都会被成功处理的话,那么需要P2P模式。
包含三个角色:主题(Topic),发布者(Publisher),订阅者(Subscriber) 。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
Pub/Sub的特点
为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
如果希望发送的消息可以不被做任何处理、或者只被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型。
star截至2024.04.06
队列名称 | 特性 | 适用场景 | stars | |
---|---|---|---|---|
1 | Apache Kafka | 1. 高吞吐量和低延迟,适用于大规模数据流处理。 2. 消息持久化和副本机制,保证数据不丢失。 3. 分布式架构和水平扩展性,支持高可用性和容错性。 4. 支持多个消费者组和分区,灵活的消息处理模型。 | Kafka 适用于大规模的数据流处理场景,如日志收集与分析、事件驱动架构、实时数据处理等。它具有高吞吐量、持久性、水平扩展等特性,适合处理海量的消息和数据。 | 27.2k |
2 | RocketMQ | 1. 高可靠性和低延迟,适用于实时消息处理场景。 2. 支持多种消息模式,如事务消息、批量消息等。 3. 高度可扩展,支持大规模分布式部署。 4. 支持多个消费者组和消息过滤,灵活处理消息路由和消费。 | RocketMQ 适用于阿里巴巴生态系统内部的各种应用场景,如实时消息处理、事务消息、流式计算等。它具有高可靠性、低延迟、水平扩展等特性,适合处理大规模的分布式消息流。 | 20.5k |
3 | NATS | 1. 轻量级和低延迟,适合快速消息传递。 2. 简单易用,适合构建微服务架构和云原生应用。 3. 支持发布/订阅模式和请求/响应模式。 4. 不提供持久性保证,适合短期通信和实时事件处理。 | NATS 适用于构建快速、轻量级的通信系统,特别适合于微服务架构和云原生应用。它具有低延迟、简单易用的特性,适合于构建需要快速消息传递的分布式系统。 | 14.6k |
4 | Apache Pulsar | 1. 高可靠性和低延迟,适用于大规模流式数据处理。 2. 多租户支持和多数据中心部署,适应复杂的环境。 3. 提供灵活的消息传递模式和可定制性。 4. 支持事务消息、批量消息等特性,满足不同的业务需求。 | Pulsar 适用于大规模的流式数据处理场景,如实时分析、事件驱动架构、消息队列解耦等。它具有水平扩展、高可靠性、多租户支持等特性,适合处理海量的实时数据流。 | 13.7k |
5 | RabbitMQ | 1. 支持多种消息传递模式,包括点对点、发布-订阅、路由、通配符等。 2. 可靠性消息传递,支持消息持久化和投递确认机制。 3. 高度可定制性,可以通过插件扩展功能。 4. 可靠的集群和节点监控机制,保证系统的可用性和可靠性。 | RabbitMQ 适用于各种场景,包括异步任务处理、工作队列、发布/订阅、路由、负载均衡等。它提供了丰富的消息传递模式和高度可定制性,适合需要灵活消息处理的应用场景。 | 11.5k |
6 | ZeroMQ | 1. 轻量级和高性能,适用于高性能的消息传递场景。 2. 简单易用的 API 和模式,支持多种消息传递模式。 3. 集成了套接字通信模式,支持多语言和多平台。 4. 不提供持久性和可靠性保证,适合短期通信和内部消息传递。 | ZeroMQ 适用于构建分布式系统和网络通信应用,特别适合于需要低延迟和高性能的场景。它提供了简单易用的 API 和轻量级的消息传递模式,适合于编写高性能的通信代码。 | 9.2k |
7 | Apache ActiveMQ | 1. 完全支持 JMS(Java Message Service),适合 Java 应用开发。 2. 提供丰富的特性和可定制性,支持多种消息传递模式。 3. 高可用性和可扩展性,支持集群部署和消息复制。 4. 支持多种传输协议和编程语言,适用于多样化的应用场景。 | ActiveMQ 适用于 Java 应用程序和需要 JMS(Java Message Service)支持的场景。它具有丰富的功能和可定制性,适合构建复杂的消息驱动应用和集成系统。 | 2.2k |
8 | Amazon SQS | 1. 完全托管,无需管理基础设施。 2. 高可靠性和持久性,保证消息不丢失。 3. 简单易用,适合快速启动和部署。 4. 支持标准队列和 FIFO 队列,满足不同的消息传递需求。 | Amazon SQS 适用于云原生应用和需要快速部署、简化管理的场景。它提供了高可靠性的消息传递服务,无需管理基础设施,适合需要快速启动的应用和服务。 | - |
9 | Redis | 1. 快速,可用于简单的消息通知和发布/订阅模式。 2. 支持持久化和数据备份,保证数据不丢失。 3. 具有其他 Redis 功能的集成,如数据缓存、计数器等。 4. 不适合处理大规模的消息流和复杂的消息处理场景。 | Redis 作为消息队列的适用场景通常包括简单的消息通知、任务队列、发布/订阅等 | - |
参考链接:
https://blog.miuyun.work/archives/1712401343121
https://www.jianshu.com/p/689ce4205021
如有不对,烦请指出,感谢!
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。