[RabbitMQ]基础概念——信道channel

目录

前言:

1.channel信道

1.1 为什么RabbitMQ 需要信道,如果直接进行TCP通信呢?

1.2 连接到RabbitMQ的示意图


前言:

最近跟着公司一起做项目重构,也有项目用到了MQ。其中用到了死信队列和延迟队列。

先整理一下路由的基础知识,不能只跟着实战,堆代码。

1.channel信道

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

信道是建立在TCP上面的虚拟链接,也就是rabbitMQ在一个TCP上面建立成百上千的信道来达到多个线程处理。

注意是一个TCP 被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID,保证了信道的私有性,对应上唯一的线程使用。

1.1 为什么RabbitMQ 需要信道,如果直接进行TCP通信呢?

上述的描述其实已经很明显了,因为TCP可以被多个线程共享,显然线程比TCP要省事的多。

TCP的创建开销很大,创建需要三次握手,销毁需要四次握手。

如果不使用信道,那么引用程序就会使用TCP方式进行连接到RabbitMQ,因为MQ可能每秒会进行成千上万的链接,

总之就是TCP消耗资源

TCP链接可以容纳无限的信道,不会有并发上面的性能瓶颈。

在代码中并不会有直观的能看到信道这个概念。

因为代码中都是用自动配置。

@Autowired
RabbitTemplate rabbitTemplate; 

或者使用

@Autowired
private AmqpTemplate template;

都是自动隐藏了详细的建立连接过程。

但是在使用rabbitmq时不管是消费还是生产都需要创建信道(channel) 和connection(连接)。

连接是连接到RabbitMQ的服务器~

 

1.2 连接到RabbitMQ的示意图

看这个示意图的话,我们好像可以直接使用Connection就可以完成信道的工作。

但是因为建立连接会很耗费性能,这也是有点类似于工厂模式那种吧~用类似nio的做法,连接tcp连接复用

当每个信道的流量不是很大时,复用。

但是当流量很大的时候,多个信道用一个connection就会出现性能的瓶颈。所以使用多个connection也是合理的,这样信道可以平摊到每个connection中。

具体调节方式需要在业务中进行体验。

关键点:复用TCP连接

 

 

参考:https://www.cnblogs.com/kry-stal/p/11693830.html

  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值