消息中间件这么多,到底应该如何选型?

本文详细介绍了消息队列在企业系统中的作用,如解耦合、异步处理、流量控制等。对比了RabbitMQ、RocketMQ、ActiveMQ和Kafka等常见消息中间件的特性、优缺点,以及适用场景,帮助读者理解如何根据需求选择合适的消息中间件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

消息队列已经逐渐成为企业应用系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能。
当前使用较多的消息队列有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ 等,而部分数据库如 Redis、MySQL 以及 PhxSQL 也可实现消息队列的功能。
消息队列概述
消息队列是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。
在这里插入图片描述
通过提供消息传递和消息排队模型,它可以在分布式环境下提供应用解耦、弹性伸缩、冗余存储、流量削峰、异步通信、数据同步等等功能,其作为分布式系统架构中的一个重要组件,有着举足轻重的地位。
消息队列的特点
采用异步处理模式
消息发送者可以发送一个消息而无须等待响应。消息发送者将消息发送到一条虚拟的通道(主题或队列)上,消息接收者则订阅或是监听该通道。
一条信息可能最终转发给一个或多个消息接收者,这些接收者都无需对消息发送者做出同步回应。整个过程都是异步的。
应用系统之间解耦合
主要体现在如下两点:
发送者和接受者不必了解对方、只需要确认消息。
发送者和接受者不必同时在线。
比如在线交易系统为了保证数据的最终一致,在支付系统处理完成后会把支付结果放到消息中间件里,通知订单系统修改订单支付状态。两个系统是通过消息中间件解耦的。
消息队列的传递服务模型
消息队列的传递服务模型如下图所示:
在这里插入图片描述
消息队列的的传输模式
点对点模型
点对点模型用于消息生产者和消息消费者之间点到点的通信。消息生产者将消息发送到由某个名字标识的特定消费者。
这个名字实际上对于消费服务中的一个 队列( Queue),在消息传递给消费者之前它被存储在这个队列中。
队列消息可以放在内存中也可以持久化,以保证在消息服务出现故障时仍然能够传递消息。
传统的点对点消息中间件通常由消息队列服务、消息传递服务、消息队列和消息应用程序接口 API 组成。
其典型的结构如下图所示:
在这里插入图片描述
特点如下:
每个消息只用一个消费者。
发送者和接受者没有时间依赖。
接受者确认消息接受和处理成功。
示意图如下所示:
在这里插入图片描述
发布/订阅模型(Pub/Sub)
发布者/订阅者模型支持向一个特定的消息主题生产消息。0 或多个订阅者可能对接收来自特定消息主题的消息感兴趣。
在这种模型下,发布者和订阅者彼此不知道对方,就好比是匿名公告板。这种模式被概括为:多个消费者可以获得消息,在发布者和订阅者之间存在时间依赖性。
发布者需要建立一个订阅( Subion),以便消费者能够订阅。订阅者必须保持持续的活动状态并接收消息。
在这种情况下,在订阅者未连接时,发布的消息将在订阅者重新连接时重新发布,如下图所示:
在这里插入图片描述
特性如下:

每个消息可以有多个订阅者。
客户端只有订阅后才能接收到消息。

注意以下三点:

发布者和订阅者有时间依赖:接受者和发布者只有建立订阅关系才能收到消息。
持久订阅:订阅关系建立后,消息就不会消失,不管订阅者是否都在线。
非持久订阅:订阅者为了接受消息,必须一直在线。当只有一个订阅者时约等于点对点模式。

消息队列应用场景
当你需要使用消息队列时,首先需要考虑它的必要性。可以使用消息队列的场景有很多,最常用的几种&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值