rabbitmq(二)原理

一.基本概念
1.1

可以看到提供方提供一个Broker(消息队列实体)当中的虚拟主机->>包含了Exchange(交换器)通过binding绑定一个队列Queue 客户端再通过连接不同渠道(Channel)给客户端提供消息
而一个消息队列又分几种模式

1.2
VirtualHost
虚拟主机。表示一批交换器,消息队列和相关对象。虚拟主机是共享相同的身份认证
和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有
自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在链接时指定,
RabbitMQ 默认的 vhost 是/
1.3
Channel 信道。
1,Channel 中文叫做信道,是 TCP 里面的虚拟链接。例如:电缆相当于 TCP,信道是
一个独立光纤束,一条 TCP 连接上创建多条信道是没有问题的。
2,TCP 一旦打开,就会创建 AMQP 信道。
3,无论是发布消息、接收消息、订阅队列,这些动作都是通过信道完成的。
1.4
交换器和队列的
交换器是通过路由键和队列绑定在一起的,如果消息拥有的路由键跟队列和交换器的
路由键匹配,那么消息就会被路由到该绑定的队列中。
也就是说,消息到队列的过程中,消息首先会经过交换器,接下来交换器在通过路由
键匹配分发消息到具体的队列中。
路由键可以理解为匹配的规则。
1.5 RabbitMQ 为什么需要信道?为什么不是 TCP 直接通

  1. TCP 的创建和销毁开销特别大。创建需要 3 次握手,销毁需要 4 次分手。
  2. 如果不用信道,那应用程序就会以 TCP 链接 Rabbit,高峰时每秒成千上万条链接
    会造成资源巨大的浪费,而且操作系统每秒处理 TCP 链接数也是有限制的,必定造成性能
    瓶颈。
  3. 信道的原理是一条线程一条通道,多条线程多条通道同用一条 TCP 链接。一条 TCP
    链接可以容纳无限的信道,即使每秒成千上万的请求也不会成为性能的瓶颈。

1.Direct(发布订阅 完全匹配)

rabbitmq默认队列
如图 Direct是根据交换器的routing key找到queues的
所以我们使用的时候消息接收就使用交换器名称,以及routingkey找到队列接收值

2.fanoutg(广播)

通过发送Exchange 将消息发送到所有绑定的队列中 所有连接到exchange的客户端 都会收到消息

3.topic

生产队列发送消息根据topic类型 发送到交换器  匹配几种相同的binding key 发送到队列  客户端消费

猜你喜欢

转载自www.cnblogs.com/liaohongbin/p/9888849.html