聊聊vertx
2018-11-10 本文已影响0人
玄冥theone
看了一周vertx,对一些概念还是有些模糊。源码也看了一部分,先记录一下吧。
vertx主要的两大功能,1,web 2, 集群(类似RPC框架)
web
web主要基于netty实现。下面模型即经典的reactor模型。(下图reactor三种模型中的一种,使用最多的)
在vertx web中,有acceptorEventLoopGroup负责处理客户端的连接请求,收到请求后,把创建好的连接注册到eventLoopGroup中的某个eventloop上。这个group中只包含1个eventloop,即1个线程处理所有连接的accept请求。
eventLoopGroup 负责处理网络读写事件。
vertx有三种模式,EventLoop、Worker、MultiThreadedWorker。第一种即业务逻辑由eventloop处理,第二种业务逻辑由Worder线程池处理,保证顺序执行任务,第三种也是有worker线程池处理,但不会新顺序执行,所以可能有并发问题。一般推荐使用第二种。
集群
集群就类似一个rpc框架了。
首先在通过consumer方法在注册中心注册节点。再通过send或者publish方法发送消息,服务端收到消息并执行回调事件,业务逻辑即写在回调中。这一些都是通过eventbus执行。
业务逻辑是由worker线程执行的,当然首先要设置为worker模式。
在eventbus启动时,默认是先从注册中心获取服务节点信息,等send或者publish时候,根据节点信息轮训拿到一个地址,建立tcp链接,并保持着(ping/pong),下次就不用再重新建立链接了。如果注册中心有变动,又会同步更新本地的缓存。