RabbitMQ 概述

什么是MQ

MQ(Message Quene) : 翻译为 消息队列,通过典型的 生产者和消费者模型,生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。
因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,轻松的实现系统间解耦。别名为 消息中间件 通过利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

MQ都有哪些

ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。它是一个完全支持JMS规范的的消息中间件。丰富的API,多种集群架构模式让ActiveMQ在业界成为老牌的消息中间件,在中小型企业颇受欢迎!

RabbitMQ

RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

Kafka

Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。
Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。

RocketMQ

RocketMQ是阿里开源的消息中间件,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是Kafka的一个Copy,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。

MQ的本质以及在系统中的位置

MQ是一种接受数据,接受请求、存储数据、发送数据等功能的技术服务。
MQ在系统中的运行流程如下:

消息中间件
1:利用可靠的消息传递机制进行系统和系统直接的通讯
2:通过提供消息传递和消息的排队机制,它可以在分布式系统环境下扩展进程间的通讯。

消息中间件核心部分

1:消息的协议
2:消息的持久化机制
3:消息的分发策略
4:消息的高可用,高可靠
5:消息的容错机制

MQ的应用场景

  1. 跨系统数据传递
  2. 高并发的流量削峰
  3. 数据的分发和异步处理
  4. 大数据分析与传递
  5. 分布式事务

比如你有一个数据要进行迁移或者请求并发过多的时候,比如你有10W的并发请求下订单,我们可以在这些订单入库之前,我们可以把订单请求堆积到消息队列中,让它稳健可靠的入库和执行。

MQ所遵守的协议

使用MQ的项目一般都是微服务架构的项目,因为现在单体项目已经不满足日渐增长的业务需求,为了提高项目运行效率以及减少运营成本,就要将系统里面的各个服务拆分成可独立部署的微服务。这些微服务可能都是Java写的,也有可能是用其他语言写的,MQ负责这些服务的消息存储服务以及消息发送,是如何协调每一个服务都能识别我消息里面正确的内容呢?
是遵循现在的TCP协议还是UDP协议,还是其他自己构建的协议呢?MQ所遵循的协议不是http协议,而是一些更加轻量简便的协议。

为了保证消息能够被不同语言SDK所构建的服务所识别,MQ使用了一些大家都共同遵守的协议,如下

AMQP协议

AMQP:(全称:Advanced Message Queuing Protocol) 是高级消息队列协议。由摩根大通集团联合其他公司共同设计。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。
特性:
1:分布式事务支持。
2:消息的持久化支持。
3:高性能和高可靠的消息处理优势。

使用该协议的就是 RabbitMQ 消息中间件

MQTT协议

MQTT协议:(Message Queueing Telemetry Transport)消息队列是IBM开放的一个即时通讯协议,物联网系统架构中的重要组成部分。
特点:
1:轻量
2:结构简单
3:传输快,不支持事务
4:没有持久化设计。
应用场景:
1:适用于计算能力有限
2:低带宽
3:网络不稳定的场景。

OpenMessage协议

是近几年由阿里、雅虎和滴滴出行、Stremalio等公司共同参与创立的分布式消息中间件、流处理等领域的应用开发标准。
特点:
1:结构简单
2:解析速度快
3:支持事务和持久化设计。

kafka

Kafka协议是基于TCP/IP的二进制协议。消息内部是通过长度来分割,由一些基本数据类型组成。
特点是:
1:结构简单
2:解析速度快
3:无事务支持
4:有持久化设计

疑问,MQ为什么不使用HTTP协议呢

MQ为什么不使用http协议呢?

  1. 因为http请求里面有很多附加的内容,比如cookie、状态码、响应码、数据加密等等内容,但是对于一个消息而言,所传递的内容并不需要那么多格式内容,也没有这个必要。MQ只要保证消息能够数据能否发送成功,性能是否高,尽量的做到简便、快捷。所以就没有使用到http协议。
  2. 大部分情况下,http请求都是短链接,而从请求到响应有可能会中断,中断之后就不能执行消息的持久化,会造成消息的丢失。

RabbitMQ 概述
https://sunshinechen.cn/2021/09/07/RabbitMQ 概述/
作者
sunshine
发布于
2021年9月7日
许可协议