消息队列(MQ)的简单介绍

本文探讨了消息队列作为一种异步通信机制的特点,包括异步通信、解耦、缓冲、可靠性和复杂性等,同时指出了实时性、数据一致性及使用条件。主流消息队列如Kafka在吞吐量方面的表现也被提及。
摘要由CSDN通过智能技术生成

什么是消息队列?

(Message Queue)消息队列是一种在软件系统中用于异步通信的机制。

在消息队列中,消息发送方将消息发送到队列中,接收方从队列中获取消息。消息队列充当了一个中间件角色。

如图:左侧是http接口调用,右侧使用消息队列

消息队列的特点

优势
  1. 异步通信:发送方无需等待接收方的响应即可继续处理其他任务,实现了异步通信的能力。(提升用户体验和系统吞吐量)

  2. 解耦:消息队列将消息的发送者和接收者解耦和解偶,它们可以独立开发、部署和扩展,不需要直接相互依赖。(提高容错性和可维护性)

  3. 缓冲和削峰填谷:消息队列可以作为缓冲层,将消息暂存起来,使得消息的发送和接收可以在不同的时间和速度上进行,平衡不同组件之间的处理能力,避免系统的峰值负载压力。举例(淘宝秒杀,这种情形时大量的服务突然打进来,那服务就会直接被压死了。但是如果采用消息队列,这秒杀进来的所有的请求都不会直接打到具体服务上,都会先打到消息队列里,然后后面的服务再慢慢消费。)

  4. 可靠性和持久化:消息队列提供持久化机制,将消息保存在持久化存储中,确保消息在发送和接收过程中不会丢失。

劣势:
  1. 实时性限制:消息队列的异步特性导致消息的传递会引入一定的延迟。(相比于直接的HTTP接口调用,消息队列需要将消息发送到队列中并等待消费者处理,这可能会导致处理时间的延迟。)

  2. 数据一致性:由于消息队列的异步特性,无法保证消息的即时一致性。(在消息发送和消费的过程中,由于网络问题、系统故障或其他原因,可能会导致消息丢失、重复消费或乱序消费等情况,这对于某些应用场景可能会带来数据一致性的问题。)

  3. 复杂性:引入消息队列会增加系统的复杂性。(需要额外的配置、部署和维护消息队列系统,涉及到消息的序列化、反序列化、消息格式等。同时,消息队列的引入也会带来一些新的概念和机制,如消息确认、重试机制、消息丢失处理等,增加了系统的复杂性和开发成本。)

  4. 可见性和调试:相对于直接的HTTP接口调用,消息队列对于消息的可见性和调试能力较差。(在消息队列中,消息被发送到队列中后,除了消费者之外,其他系统无法直接查看和调试消息的内容和状态。这可能增加故障排查和调试的难度。)

使用消息队列的条件

  1. 生产者不需要从消费者处获得反馈

  2. 容许短暂的不一致性

  3. MQ的解耦异步削峰大于负面影响

目前市面上的消息队列有很多,例如:Kafka、RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ等。

目前的吞吐量上面,kafka是这些中间件的做得最好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值