RabbitMq基础架构概念

RabbitMq基本工作原理图:


在 RabbitMQ 中,消息传递的机制涉及多个关键组件。生产者通过连接(Connection)与 RabbitMQ Broker 建立通信,然后创建通信通道(Channel)。Exchange 接收生产者发送的消息,并通过路由规则将消息发送到一个或多个队列。队列是消息的缓冲区,等待被消费者接收。消费者通过连接创建通道,订阅队列以接收消息。Virtual Host 提供了逻辑隔离,允许在同一 RabbitMQ Broker 上运行多个应用程序,每个应用程序都有自己的独立配置和权限。这些组件共同构建了一个灵活、可靠且可扩展的消息传递系统。

Producer

"A producer is an application that sends a message. The producer is responsible for creating a message and sending it to a destination."

生产者是消息的发送方。在RabbitMQ中,生产者创建连接到Broker,并通过连接创建Channel。生产者将消息发送到Exchange,然后Exchange根据路由规则将消息路由到一个或多个队列。生产者通常关心消息的生成和发送,而不关心消息具体要发送到哪个队列。

Connection

"A connection represents a real TCP connection to the broker. When a connection is established, the client and the server negotiate an AMQP version that they both support, and from then on the communication is in terms of frames. The connection is multi-threaded, with the I/O done in a separate thread

在RabbitMQ中,Connection是生产者和消费者与RabbitMQ Broker之间的TCP连接。Connection是一个轻量级的、成本较高的对象,它的创建和销毁都是一个相对昂贵的操作。因此,通常情况下,一个应用程序仅创建一个Connection,并在应用的生命周期内保持它处于打开状态。Connection是线程安全的,可以被多个线程同时使用。

- Channel

"A channel is the basic unit of communication and is where most of your application code will be run. Channels are used to multiplex multiple threads of control down a single connection."

Channel是建立在Connection之上的虚拟连接。在一个Connection中可以创建多个Channel,每个Channel代表一个独立的会话。Channel是线程不安全的,因此在多线程环境中,每个线程应该拥有自己的Channel。使用Channel可以更有效地利用Connection,因为创建和销毁Channel的开销相对较小。

Broker

"A broker is a message broker server that implements the Advanced Message Queuing Protocol (AMQP) standard."

Broker是RabbitMQ的核心组件,它负责接收、存储和转发消息。Broker可以理解为RabbitMQ服务器的实例。它管理消息的交换、队列和路由规则。Broker接收来自生产者的消息,根据预定义的规则将这些消息路由到相应的队列,最后由消费者来获取并处理。

- Exchange

"An exchange is a message routing agent, defined by a name, that will route messages to queues based on rules defined by the exchange type."

Exchange是消息的分发中心,它接收从生产者发送的消息并根据路由规则将消息路由到一个或多个队列。Exchange的类型决定了路由规则的具体方式,包括直连(direct)、主题(topic)、扇出(fanout)等。生产者将消息发送到Exchange,而不是直接发送到队列。

- Queue

"A queue is the name for a post box which lives inside RabbitMQ. Although messages flow through RabbitMQ and your applications, they can only be stored inside a queue."

Queue是消息的缓存区,它存储在Exchange中被路由的消息。每个队列都有一个名称,并可以有一些配置参数,例如持久性、排他性和自动删除等。消费者可以订阅队列,从中接收消息。

Consumer

消费者是消息的接收方。它通过创建连接到Broker,并通过连接创建Channel来订阅队列。一旦订阅了队列,消费者就开始从队列中获取消息进行处理。消费者关心消息的接收和处理,而不需要关心消息的产生过程。

"A consumer is an application that receives a message. The consumer is responsible for receiving a message from a destination and processing it."

Virtual Host

在 RabbitMQ 中,Virtual Host(虚拟主机)是一个逻辑上的概念,它允许将消息队列、交换机和绑定等实体逻辑地隔离在不同的虚拟环境中,就像在物理服务器上运行多个操作系统一样。每个 Virtual Host 具有自己独立的用户权限和配置。

关键概念:
  1. 逻辑隔离: Virtual Host 提供了一种逻辑隔离的机制,不同的 Virtual Host 之间相互独立,彼此不受影响。这使得不同的应用或服务可以在同一个 RabbitMQ Broker 上运行,而不会相互干扰。
  2. 权限控制: 每个 Virtual Host 都有自己的用户和权限配置。这样,你可以为每个应用程序或服务设置不同的权限,确保它们只能访问属于自己的 Virtual Host 中的资源。
  3. 配置隔离: 不同的 Virtual Host 允许有相同名称的交换机、队列等,它们之间的配置是相互独立的。这样,你可以使用相同的名称来定义资源,而不用担心冲突。
使用场景:
  1. 多租户应用: 在一个 RabbitMQ Broker 上运行多个租户的应用程序,每个租户使用一个独立的 Virtual Host。
  2. 环境隔离: 将开发环境、测试环境和生产环境隔离在不同的 Virtual Host 中,以防止因为错误操作或测试而影响到生产环境。
如何创建 Virtual Host:

在 RabbitMQ 中,可以通过 RabbitMQ Management 界面或通过 RabbitMQ 的命令行工具 rabbitmqctl 来创建 Virtual Host。

  • 通过 RabbitMQ Management 界面:
    1. 打开 RabbitMQ Management 界面。
    2. 在 "Admin" 选项卡中找到 "Add a new virtual host"。
    3. 输入虚拟主机的名称并保存。
  • 通过 rabbitmqctl:
rabbitmqctl add_vhost <vhost_name>

创建 Virtual Host 后,需要为该 Virtual Host 配置用户及其权限。

注意事项:

  • Virtual Host 的名称是一个字符串,通常用来标识应用程序或服务。
  • RabbitMQ 默认有一个名为 "/" 的默认 Virtual Host,所有未指定 Virtual Host 的资源都属于默认 Virtual Host。

通过使用 Virtual Host,RabbitMQ 提供了一种有效的方式来隔离和管理不同应用程序、服务或环境之间的消息通信。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值