RabbitMQ 核心概念

一、VirtualHost(虚拟机)

RabbitMQ is multi-tenant system: connections, exchanges, queues, bindings, user permissions, policies and some other things belong to virtual hosts, logical groups of entities. If you are familiar with virtual hosts in Apache or server blocks in Nginx, the idea is similar.

在 RabbitMQ Server 上可以创建多个虚拟的 message broker,又叫做 Virtual Hosts (vhosts)。每一个 vhost 本质上是一个 mini-rabbitmq server,分别管理各自的 exchange,和 bindings。vhost 相当于物理的 server,可以为不同 app 提供边界隔离,使得应用安全的运行在不同的 vhost 实例上,相互之间不会干扰。producer 和 consumer 连接 rabbit server 需要指定一个 vhost。

创建 Virtual Host
配置权限

二、Connection(连接)

Connection 是 RabbitMQ 的 socket 链接,它封装了 socket 协议相关部分逻辑。

三、Exchange(交换机)

在 AMQP 协议中的核心思想就是生产者和消费者的解耦,生产者从不直接将消息发送给队列。生产者通常不知道是否一个消息会被发送到队列中,只是将消息发送到一个交换机。先由 Exchange 来接收,然后 Exchange 按照特定的策略转发到 Queue 进行存储。Exchange 就类似于一个交换机,将各个消息分发到相应的队列中。

四、Channel

Channel 是我们与 RabbitMQ 打交道的最重要的一个接口,我们大部分的业务操作是在 Channel 这个接口中完成的,包括定义 Queue、定义 Exchange、绑定 Queue 与 Exchange、发布消息等。如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP method 包含了 channel id 帮助客户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销

五、Queue(队列)

Queue 的作用就是绑定交换机或者是接受消息,只要没有消费者,消息就会一直被存储在队列中。Queue 受主机内存和磁盘的限制,它的的本质是一个巨大的消息缓冲区。producer 可以向 queue 发送消息,consumers 也可以从 queue 消费消息。

六、Binding

Binding 是将队列绑定到交换机上,通过不同方式的绑定,可以实现不同的工作模式

标签:

About: Mr.zhang

成谜于写 bug 无法自拔~


发表评论

邮箱地址不会被公开。 必填项已用*标注