RabbitMQ消息路由与交换器
RabbitMQ消息路由与交换器
RabbitMQ消息路由
生产者需要把消息发布到Exchange上,消息最终到达队列并被消费者接收,Binding决定交换器上的消息应该被发送到哪个队列中。
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直接通信?
TCP的创建和销毁,开销大,创建需要三次握手,销毁需要四次分手
如果不使用信道,那么引用程序就会使用TCP的方式连接到rabbitmq,高峰时每秒成千上万条连接会造成资源的巨大浪费(一条tcp消耗资源,成千上万的tcp会非常消耗资源),而且操作系统每秒处理TCP连接数量也是有限的,必定会造成性能瓶颈
3.信道的原理是一条线程一条信道,多条线程多条信道共同使用一条TCP连接。一条TCP连接可以容纳无限的信道,及时每秒造成成千上万的请求也不会造成性能瓶颈