前言:
本章深入理解一下rocketMQ是如何基于netty扩展出高性能网络通信架构的?rocketMQ基于mmap内存映射实现commitLog磁盘文件的高性能读写?
1.MQ如何基于netty扩展出高性能网络通信架构的?首先知道三个概念:
1.1:Reactor:主要用来接收写入或者是拉取请求;【线程池,默认3个线程】
1.2:worker:主要用于处理ssl加密验证,编码解码,连接空闲检查,网络连接管理等等工作;【线程池,默认8个线程】;
1.3:sendMessages:业务线程池完成请求的处理;
2.Reactor
首先作为broker而言,会有一个Reactor主线程,这个线程主要监听的2888,39150这样的端口,出现这样的一张图:
假设现在有一个producer消息生产者想要和broker建立一个TCP长连接,
2.1:长连接和短连接的区别
【短连接:如果要给别人发送一个请求,必须要简历连接—>发送请求—>接受响应—>断开连接,下次再要发送一次请求,过程重新来多一遍】;
【长连接:建立一个连接->发送请求->接收响应->发送请求->接受响应->发送请求…】这个连接会存在很长时间,所以是长连接;
2.2:TCP长连接又是什么呢?
TCP简单来将就是一个协议,所谓的协议就是按照TCP这个协议的要求和规定好的步骤发送请求,说白了就是一种规范,上班迟到了就得扣你的money;
2.3:broker用什么东西代表和producer之间建立的这个长连接呢?
SocketChannel,producer中会有一个socketchannel,broker中也有一个socketchannel,这两个socketchannel就代表了他们建立好的这个长连接,【如图所示】
图中还标记了一个长连接发送消息的圆圈,没错,可以这样的去理解一下,producer就是通过socketchannel和broker中的主线