在开始我们的RabbitMQ教程分享之前,让我们首先了解一下AMQP协议,它是RabbitMQ实现消息服务依赖的基础。
1.什么是AMQP
AMQP,Advanced Message Queuing Protocol,翻译成中文即高级消息队列协议。它是一个提供统一消息服务的应用层二进制协议。基于此协议的客户端与消息中间件可传递消息,并不受不同平台、开发语言和操作系统的影响,即可跨平台传输。
2. AMQP模型
下面是AMQP模型的简要示意图:
从上图,我们可以了解到AMQP包括以下主要组件和逻辑概念
- Publisher(生产者):消息生产者,AMQP定义了消息的格式,所以生产者需要按照AMQP消息格式生产数据。
- Broker(服务器):Broker是一个物理上的服务器(或虚拟机),它是部署了消息中间件并接收处理客户端请求的实体。
- Exchange(交换机):它是一个逻辑上的概念,负责接收消息,是整个消息中间件的入口。
- Queue(队列):它负责保存消息,并将消息转发给消费者。
- Binding(绑定):它是Exchange与Queue之间的虚拟连接,实现了根据不同的Routing Key(路由规则)将消息路由到对应的Queue上。
- Message(消息):消息,本质上就是服务器与客户端传输的数据,由元信息和消息体组成。
- Virtual Host(虚拟主机):它是一个逻辑上的概念,一个Broker上可以有多个Virtual Host,它起到一个命名空间的作用,可以让服务于不同业务的Exchange和Queue隔离开,是实现权限控制的最小单位。
- Connection(连接):客户端与服务器之间的网络连接。
- Channel(信道):一次客户端与服务器之间的通信,相当于JMS中的Session的概念。
3. AMQP的主要处理流程
生产者是将消息发送到Exchange,Exchange根据路由规则Routing Key将消息路由到不同的Queue上,如果Queue上有消费者监听,则消费者可以获得消息。生产者在生产消息的时候是不知道消费者的状态的,消费者在消费消息时也是不知道消息是从哪个生产者来的,即生产者与消费者之间的完全解耦的。
4. AMQP与其他相关协议的区别
除了AMQP之外,还有许多面向消息中间件服务制定的标准、协议和技术。现在我们来简单分析一下它们与AMQP的区别。
- JMS:Java Message Service,是由Java官方提出的消息标准,它集成在Java EE中,为企业级消息应用提供了一套统一的消息操作接口。它只是一套接口,一个技术标准,而AMQP是基于线路层的通信协议,AMQP不从API层进行限定,而是直接定义网络交换的数据格式。两者本来就不是同一性质的事物;JMS只能为Java平台服务,而AMQP可以跨平台跨语言;在JMS中,消息发送者需要知道消息目的的拓扑。在AMQP中,路由逻辑被封装在了exchange之中,消息消费者与发送者之间是完全解耦的。
- ZeroMQ:ZeroMQ是一个网络编程库,提供了消息的一种语义,不需要中心化的broker,但是没有broker提供的持久化和保证送达机制。核心思想,它是一个可交互的网络编程库,基于多种语言实现。它是一个构建高可用性和高扩展性系统的一种选择。它的性能更优,但是功能简单,许多功能需要用户自行实现,比较复杂。
5. 更多
这里只是简单介绍一个AMQP协议的基础内容,为后面我们了解和学习RabbitMQ打一个理论基础,如果想了解更多关于AMQP的内容,可以访问AMQP官网。
注意
原创博文,仅为学习及技术分享所用,切勿用于商业用途,转载请注明出处。