【RabbitMQ】 基础名词及控制台简单介绍
参考文献:《RabbitMQ实战指南》
其他相关概念和安装请戳:【RabbitMQ】基础相关概念及安装
1.RabbitMQ 基础名词
-
RabbitMQ 模型架构
我觉得书上这一段说的非常贴切,RabbitMQ本质上就是一种生产者和消费者的模型。
由生产者发送消息,消息中包含两个部分,消息标签和消息体,消息体自然就是我们发送的数据,而标签就是这个消息体的标识,就像是http中的header信息,比如一个交换器的名称和一个路由键,这两个都是rabbitmq的名词,等会会有更详细的说明。
消费者连接到rabbitmq服务器,并订阅一个消息队列,接受队列中的消息,接受到的只是消息体,也不知道生产者是谁,消费的时机和速度等等都可以自己来设置。
rabbitMQ Broker,其实就是一个服务节点,或者一个服务实例,服务器。上述流程书上也有展示:
-
相关名词:
我们先来看一个大图,里边包含了更加细节的内容
下来我们分别简单介绍各个组件的作用-
Broker
服务节点,同上述rabbitMQ Broker,是接收和分发消息的应用,RabbitMQ Server就是 Message Broker。 -
Virtual host
虚拟主机,也可以简称为虚拟机,出于多租户和安全因素设计的,rabbitMQ把 AMQP 的基本组件都划分到一个虚拟的分组中,类似于网络中的 namespace(命名空间) 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建 exchange/queue 等。 -
Connection
连接,publisher生产者 和 consumer消费者 与 broker服务节点 之间通信所需的TCP连接。 -
Channel
信道,信息通道,如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是非常巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销。网络IO的模型中也有channel相关概念。 -
Queue
消息队列,简称队列,生产者发送的消息会被交换机分发,然后被存储在对应的队列中,等待被消费者取走(消费)。 -
Exchange
交换机,生产者发出的message到达 broker 的第一站,简写为一个英文大写的X,其根据分发规则,匹配查询表中的 routing key(路由key),分发消息到queue(队列) 中去。常用的类型有三种:direct定向 (point-to-point), topic主题 (publish-subscribe) and fanout广播 (multicast)。 -
RoutingKey
路由key,生产者端发送消息时需要指定的值,就是上述的消息中的消息标签,交换机会根据此路由key,将其分发给对应的队列。 -
Binding 和 BindingKey
绑定和绑定key,绑定是一个动作,是建立交换机和队列之间连接的动作,绑定key是一个具体的值,在绑定时需要用到,举个栗子,生产者发送的路由key为abc123,发送给了交换机X,这边队列A和交换机X绑定时指定了绑定key为abc123,此时二者匹配,则虚拟机会将此消息转发到队列A中。
补充:
-
Broker
2.RabbitMQ 控制台简单介绍
-
Overview
-
Totals 总览
所有内容的概览。 -
Nodes 节点
可以在这个tab中观测集群中的所有rabbitmq节点状态信息,这里我们没有集群,所以只有本地一个服务节点。 -
监听的所有端口号Prots以及web信息,是我们的management插件信息。
-
导入和导出节点定义信息 json格式
-
-
Connections
所有和此服务节点连接的信息都可以在此查看,生产者和消费者的连接。 -
Channels
信息通道,所有和rabbitmq建立连接的信息通道都在次此可以查看,是Connections的子内容。 -
Exchanges
查看所有的交换机,以及可以在这里通过页面输入的方式创建一个交换机。当然是不建议这么创建的,我们在代码中创建肯定会更加直观,这里也是一种创建渠道,了解即可。里边是默认自带的所有交换机。 -
Queue
队列,没有默认的队列,默认为空,依旧可以通过页面来创建一个队列。 -
Admin
用户窗口
我们可以简单的创建一个用户和一个虚拟主机,
创建虚拟主机:
创建一个新用户,将虚拟主机绑定至新用户:
此时该账户下没有虚拟主机与其对应
绑定虚拟主机,同时将guest的权限去掉:
logout之后使用新用户登录:
OK
以上。