跳至主要內容

RabbitMQ消息路由与交换器


RabbitMQ消息路由与交换器

RabbitMQ消息路由

生产者需要把消息发布到Exchange上,消息最终到达队列并被消费者接收,Binding决定交换器上的消息应该被发送到哪个队列中。 RabbitMQ消息路由

RabbitMQ交换器

RabbitMQ具有4种交换器:Direct交换器、Fanout交换器、Topic交换器、Headers交换器。

  • Direct:如果消息中的路由键和Binding中的绑定键一致,交换器就讲消息发送到对应的队列中。
  • Fanout交换器:Fanout交换器不处理路由键,而是将队列直接绑定到交换器。
  • Topic交换器:Topic交换器通过模式匹配分配消息的路由键属性,将路由键和某种模式进行匹配,而队列则需要绑定一种模式。
  • Headers交换器:Headers交换器和Direct交换器完全一致,但是性能很差,所以目前已经废弃。

RabbitMQ信道

信道是生产消费者与rabbit通信的渠道,生产者publish或是消费者subscribe一个队列都是通过信道来通信的。

信道是建立在TCP连接上的虚拟连接,就是说rabbitmq在一条TCP上建立成百上千个信道来达到多个线程处理,这个TCP被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID ,保证了信道私有性,对应上唯一的线程使用。

RabbitMQ 为什么需要信道?为什么不是TCP直接通信?

  1. TCP的创建和销毁,开销大,创建需要三次握手,销毁需要四次分手

  2. 如果不使用信道,那么引用程序就会使用TCP的方式连接到rabbitmq,高峰时每秒成千上万条连接会造成资源的巨大浪费(一条tcp消耗资源,成千上万的tcp会非常消耗资源),而且操作系统每秒处理TCP连接数量也是有限的,必定会造成性能瓶颈

3.信道的原理是一条线程一条信道,多条线程多条信道共同使用一条TCP连接。一条TCP连接可以容纳无限的信道,及时每秒造成成千上万的请求也不会造成性能瓶颈

上次编辑于:
贡献者: Neil