二、AMQP基础概念介绍

RabbitMQ 是使用 Erlang 语言基于AMQP协议进行开发的,也可以说 RabbitMQ 是 AMQP 协议的一种实现。学习 RabbitMQ 之前需要对 AMQP 协议进行一些了解。

什么是AMQP

AMQP,即Advanced Message Queuing Protocol,AMQP 被设计成为一种开放标准,以解决众多的消息队列需求和拓扑结构问题。基于此协议的客户端与消息中间件可传递消息,并不受不同客户端产品和不同中间件产品的影响,也不受不同的开发语言条件的限制。

AMQP名词解释

Vhost

虚拟主机(Virtual Host),每一个 Vhost 本质上是一个 mini 版的消息队列服务器,它拥有自己的队列、交换器、绑定等,更重要的是它拥有自己的权限机制,Vhost 相当于物理机上的虚拟机。它们各个实例间是逻辑分离的。

队列 Queue

用来存储消息的数据结构,位于硬盘或内存中。每个消息都会被投入到一个或多个队列里。

生产者 Producer

消息生产者,即投递消息的程序。

消费者 Consumer

消息消费者,即接收消息的程序。

连接 Connection

TCP 连接,生产者或消费者与消息队列服务间的物理 TCP 连接。

交换器 Exchange

消息代理服务器中用于把消息路由到队列的组件。生产者将消息发送到交换器,由交换器将消息路由到一个或多个队列中(或者丢弃),交换器按照相应的绑定逻辑将消息路由到队列中。

绑定 Binding 或 绑定键 Binding Key

用于告诉交换器消息应该被存储到哪个队列。它的作用是把交换器和队列按照路由规则绑定起来,换句话说,绑定键是绑定队列到交换器的粘合剂。

路由键 Routing Key

路由键可以是队列名称,也可以是一串用于描述消息、具有特定语法的字符串。当交换器对一条消息进行评估以决定路由到哪些合适的队列时,消息的路由键会和绑定键进行比对。

信道 Channel

在客户端的每个物理 TCP 连接里,可建立多个信道,每个信道代表一个会话任务。就像一条光缆有许多光纤束一样。

为什么引入信道的概念

生产者要发布消息,消费者要消费消息都要跟先和消息中间件建立起连接——TCP 连接,信道是建立在 TCP 连接内的虚拟连接。AMQP 命令都是通过信道发送的,每条信道都会被指派一个唯一的 ID。
使用信道而不是 TCP 连接发送 AMQP 命令的原因在于,操作系统建立和销毁 TCP 会话的开销是大的。假设应用程序从队列消费消息,并根据服务需求合理调度线程,如果只进行 TCP 连接,那么每个线程都需要自行连接到消息中间件,在应用高峰期会有每秒成百上千条 TCP 连接,这会造成 TCP 连接的巨大浪费,何况操作系统每秒也就只能建立这点数量的连接,因此很容易就碰到瓶颈了。如果所有线程只是用一条 TCP 连接就能满足性能方面的要求,并且又能确保每条线程的私密性,就像拥有独立的连接一样,就很完美了是不是。
线程启动后,会在现有连接上创建一条信道,也就获得了连接到消息中间件的私密通道路径,而不会给操作系统的 TCP 栈造成额外的负担,因此即使每秒成百上千的创建信道也不会影响操作系统。在一条 TCP 连接上创建多少条信道是没有限制的。


信道与连接
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981阅读 16,015评论 2 11
  • 这个指导提供一个AMQP 0-9-1协议的概述,它是RabbitMq支持的一个协议。 什么是AMQP 0-9-1?...
    浪_6e80阅读 757评论 0 1
  • 概述 RabbitMQ是目前非常热门的一款消息中间件,不管是互联网行业还是传统行业都在大量地使用 。 Rabbit...
    Tian_Peng阅读 1,706评论 1 4
  • 1. 生产者 用于创建消息,并发布到Rabbit服务器 2. 消息 包含两部分,有效载荷(payload)和标签...
    LeeSpringFly阅读 253评论 0 0
  • 标准文件有哪些 当我们运行一个可执行程序的时候就已经打开了三个文件 标准输入文件 stdin 标准输出文件 std...
    junson阅读 343评论 0 0