生产者-----------》exchange----queue------------------》接收者
交换器和队列基于routingKey路由键绑定在一起。
发送消息:只需要指定交换器、路由键
交换器再根据路由键来决定,将消息发送到哪些队列
路由键,将交换器和队列绑定在一起。如果消息拥有的路由键,跟交换器和队列的路由键匹配,
那么消息就会被路由到该绑定的队列中。
channel信道,是TCP里面的虚拟链接?。一条TCP连接上可以创建多条信道?。
rabbitmq为什么需要信道?而不是TCP直接通信?
1、TCP的创建和销毁开销特别大,创建需要3次握手,销毁需要4次分手。高并发时,会产生过多TCP链接数
2、信道的原理是一条线程一条通道,多条线程多条通道共用一条TCP链接。一条TCP链接可以容纳无限的信道???
疑问:这是在TCP连接中开线程吗?一个TCP连接,处理多个线程任务?不懂,还是rabbitmq只是用了连接池,信道只是到池中获取空闲的连接。连接池也是减少了TCP建立连接、销毁连接的次数
共用TCP链接的肯定是同一个客户程序,可以看看数据库连接池是怎么做的,那是只有两个服务之间的直接的通信,
看看连接池怎么优化连接,减少开销的。
连接池:好像是一直保持若干个连接不断开,每次连接时,到这个池中去拿空闲连接,这样就不用过多建立TCP连接
网络通信NIO:好像使用了线程池,每次IO都需要一个线程来处理。传统IO是每次IO都要新建一个线程来处理,
而NIO是从线程池中拿空闲的线程来处理IO,这样线程就可以复用,减小了新建、结束线程的开销。
两个池的概念区别:
线程池在上层、连接池在底层,
连接池关注的是数据怎么到达程序端口。
线程池关注的是怎么处理这些到达的数据。