2.3. RabbitMQ的核心概念

未匹配的标注

RabbitMQ的核心概念

VirtualHost

RabbitMq当中的VirtualHost(虚拟消息服务器),每个VirtualHost相当于一个相对独立的RabbitMQ服务器,每个VirtualHost之间是相互隔离的,拿数据库mysql类类比,RabbitMq相当于mysql,RabbitMq中的VirtualHost就相当于mysql当中的一个库
当然可通过命令去创建VirtualHost 但是我们用界面化的形式去操作新建一个VirtualHost:
RabbitMQ的核心概念
如图这不是有一个name 直接在里面填写你要新创建的VirtualHost的名称即可 比如我创建了一个叫做imooc
然后你再去创建一个用户,如下图所示:
RabbitMQ的核心概念
点击具体的用户的名称进去 如下图所示:
RabbitMQ的核心概念
你就可以去设置该用户可操作的 Virtual Host的部分是哪一个
如果你不给用户设置他能操作的Virtual Host 那么这个用户是不能用的哈
当然
你也可以点击具体的virtual host的名字进去 设置这个virtualhost 是属于哪个用户的 他可以被分配给多个用户使用:
RabbitMQ的核心概念
建立了huj这个账号并且赋予了imooc这个virtual host,那么huj这个账号不管是发送链接connections还是发送queues 都只能在imooc这个virtualhost当中去操作,只能哈!
virtual host 是用来区分队列用的 也是用来隔离账号的使用用的!
好处是什么呢?不同环境我们可以通过不同的virtual host来隔离 比如测试环境是一个virtualhost 正式环境就是另一个virtual host

Connections

链接
只要我们的rabbitmq监听进程以后,那么这个链接就会在Connections当中展示链接,只要我们的rabbitmq监听进程以后,那么这个链接就会在Connections当中展示

Exchanges

交换机
交换机在这里相当于一个中转,所有已经实名的交换机都会在Exchanges列表当中罗列出来,当生产者发送一个消息以后它会首先进入交换机也就是Exchanges里面,根据交换机制定的规则绑定key,通过交换机把消息发送到对应的key里面,再来点专业的解释:消息是由producer发送到exchange,由exchange根据消息头部属性,binding_key和rouing_key路由到queue,并不是producer直接发送到queue
exchange相当于messages和queue的中介,在RabbitMQ中有自己的虚拟端exchange相当于messages和queue的中介,在RabbitMQ中有自己的虚拟端

channel

我们知道无论是生产者还是消费者,都需要和 RabbitMQ Broker 建立连接,这个连接就是一条 TCP 连接,也就是 Connection。
一旦 TCP 连接建立起来,客户端紧接着可以创建一个 AMQP 信道(Channel),每个信道都会被指派一个唯一的 ID。
信道是建立在 Connection 之上的虚拟连接,RabbitMQ 处理的每条 AMQP 指令都是通过信道完成的
我们完全可以使用 Connection 就能完成信道的工作,为什么还要引入信道呢?
试想这样一个场景,一个应用程序中有很多个线程需要从 RabbitMQ 中消费消息,或者生产消息,那么必然需要建立很多个 Connection,也就是多个 TCP 连接。
然而对于操作系统而言,建立和销毁 TCP 连接是非常昂贵的开销,如果遇到使用高峰,性能瓶颈也随之显现。
RabbitMQ 采用类似 NIO(Non-blocking I/O)的做法,选择 TCP 连接复用,不仅可以减少性能开销,同时也便于管理。
每个线程把持一个信道,所以信道复用了 Connection 的 TCP 连接。同时 RabbitMQ 可以确保每个线程的私密性,就像拥有独立的连接一样。当每个信道的流量不是很大时,复用单一的 Connection 可以在产生性能瓶颈的情况下有效地节省 TCP 连接资源。但是信道本身的流量很大时,这时候多个信道复用一个 Connection 就会产生性能瓶颈,进而使整体的流量被限制了。此时就需要开辟多个 Connection,将这些信道均摊到这些 Connection 中,至于这些相关的调优策略需要根据业务自身的实际情况进行调节
我也是百度的哈,这些话我可描述不出来!
RabbitMQ的核心概念

Queues

队列
能从界面上新建的我绝不用命令 哈哈 新建一个队列 是在 / virtual host上新建的哦
RabbitMQ的核心概念
队列会绑定到交换机上 交换机会根据绑定键将数据发送到不同的队列里面去 没有被消费的数据会被保存在队列里面 不废话了 redis里面不就有list吗 那是模拟的消息队列 就这么个意思!

Binding

通过Binding将队列绑定到交换机上 有不同的绑定方式 可以实现不同的功能

这节就写这么多吧 累了

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~