vertx源码分析(一)---------------vertx启动流程分析

本文从环境准备开始,详细介绍了vertx的启动流程。首先,提供了vertx源码在国内和github的下载地址,并指出了解决依赖报错的方法,特别是针对vertx 3.8.0分支的注意事项。接着,逐步解析启动过程,包括初始化vertx、VertxThreadFactory的构建、eventLoopGroup的创建,以及deployVerticle的详细步骤,如DeploymentOptions的使用、deploymentManager的部署操作、VertxImpl和ContextImpl中获取EventLoop的过程,最终到达deploymentManager的doDeploy方法和DeploymentImpl的初始化,以及runOnContext的调用。
摘要由CSDN通过智能技术生成

环境准备

源码下载

国内:https://gitee.com/mirrors/vertx

github: https://github.com/eclipse-vertx/vert.x

解决依赖报错

本系列以3.8为基础进行分析,所以请讲源码调整到3.8分支,
并修改pom.xml:

<stack.version>3.8.0</stack.version>

由于maven仓库的3.8.0不存在后边的SNAPSHOT,如果不修改则maven找不到相应的配置文件

启动流程

初始化vertx
@Override
  public Vertx vertx() {
    return vertx(new VertxOptions());
  }

  @Override
  public Vertx vertx(VertxOptions options) {
    if (options.getEventBusOptions().isClustered()) {
      throw new IllegalArgumentException("Please use Vertx.clusteredVertx() to create a clustered Vert.x instance");
    }
    return VertxImpl.vertx(options);
  }

VertxOptions配置请查看另外一篇博客

static VertxImpl vertx(VertxOptions options) {
   
    VertxImpl vertx = new VertxImpl(options, Transport.transport(options.getPreferNativeTransport()));
    vertx.init();
    return vertx;
  }
//transport 与netty的相同,具体请自行学习netty相关知识
  private VertxImpl(VertxOptions options, Transport transport) {
   
    // Sanity check
    if (Vertx.currentContext() != null) {
   
      log.warn("You're already on a Vert.x context, are you sure you want to create a new Vertx instance?");
    }
    //关闭vertx时触发的handler
    closeHooks = new CloseHooks(log);
    //阻塞线程检查(检查Map<VertxThread, Object> threads中注册的线程,线程通过registerThread来注册)
    checker = new BlockedThreadChecker(options.getBlockedThreadCheckInterval(), options.getBlockedThreadCheckIntervalUnit(), options.getWarningExceptionTime(), options.getWarningExceptionTimeUnit());
    //通过VertxThreadFactory创建EventLoop线程池
    eventLoopThreadFactory = new VertxThreadFactory("vert.x-eventloop-thread-", checker, false, options.getMaxEventLoopExecuteTime(), options.getMaxEventLoopExecuteTimeUnit());
    //根据eventLoopThreadFactory的配置真正的创建eventLoopGroup
    eventLoopGroup = transport.eventLoopGroup(options.getEventLoopPoolSize
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值