Vert.x源码分析之Launcher

在使用 Vert.x
时,一般先从生命周期下手。而 vertx-core
提供了默认的 io.vertx.core.Launcher
实现。

Vert.x 生命周期中的事件

vertx-core
包中存在一个 interface
,名为 VertxLifecycleHooks
,可让启动器的子类在发生不同事件时得到通知。

afterConfigParsed

这是 Vert.x
启动前的钩子,在这个阶段, Vert.x
Options
还可以被更新。入参 config
是通过命令行中的 -conf
传递进来的参数

void afterConfigParsed(JsonObject config);
复制代码

beforeStartingVertx

afterConfigParsed
基本相同,参数也可以改变。入参为 VertxOptions

void beforeStartingVertx(VertxOptions options);
复制代码

afterStartingVertx

此时 Vert.x
实例已经被创建。

void afterStartingVertx(Vertx vertx);
复制代码

beforeDeployingVerticle

Verticle
部署之前。

void beforeDeployingVerticle(DeploymentOptions deploymentOptions);
复制代码

beforeStoppingVertx

Vert.x
实例被终止之前。

void beforeStoppingVertx(Vertx vertx);
复制代码

afterStoppingVertx

Vert.x
实例被终止之后。

void afterStoppingVertx();
复制代码

handleDeployFailed

部署失败时。

void handleDeployFailed(Vertx vertx, String mainVerticle, DeploymentOptions deploymentOptions,
Throwable cause)
;
复制代码

Vert.x 中的 Launcher

Launcher
是 Vert.x 的启动器,实现了 VertxLifecycleHooks
,但是相关方法的实现大多是空的,我们可以自定义自己的 Laucher
针对每个事件阶段进行处理。

/**
* 部署失败时,此方法会被调用。您可以重写此方法来自定义行为。
* 默认情况下,它关闭`vertx`实例。
*
* @param vertx vert.x 实例
* @param mainVerticle verticle
* @param deploymentOptions verticle 部署参数
* @param cause 部署失败的原因
*/

public void handleDeployFailed(Vertx vertx, String mainVerticle, DeploymentOptions deploymentOptions, Throwable cause) {
// 如果部署失败,默认行为是关闭Vert.x
vertx.close();
}
复制代码

自定义 Launcher 举例

/**
* Description: 启动 Launcher .<br>
*
* @author m-xy
* Created By 2020/4/2 12:14
*/

public class MainLauncher extends Launcher {
private final static Logger logger = LoggerFactory.getLogger(MainLauncher.class);

public static void main(String[] args) {
System.setProperty(LOGGER_DELEGATE_FACTORY_CLASS_NAME, SLF4JLogDelegateFactory.class.getName());
new MainLauncher().dispatch(args);
}

/**
* 启动前准备阶段.
*
* @param options 参数
*/

@Override
public void beforeStartingVertx(VertxOptions options) {
logger.info("[Vert.x] Vert.x Options Ready");
options.setPreferNativeTransport(true);
super.beforeStartingVertx(options);
}

/**
* Vert.x启动完成阶段.
*
* @param vertx
*/

@Override
public void afterStartingVertx(Vertx vertx) {
logger.info("[Vert.x] Starting Vert.x (JVM running for you)");
super.afterStartingVertx(vertx);
}

/**
* Vert.x停止阶段.
*/

@Override
public void afterStoppingVertx() {
logger.info("[Vert.x] Stopping Vert.x (JVM running for you)");
super.afterStoppingVertx();
}

/**
* 部署失败时,此方法会被调用。您可以重写此方法来自定义行为。
* 默认情况下,它关闭`vertx`实例。
*
* @param vertx vert.x 实例
* @param mainVerticle verticle
* @param deploymentOptions verticle 部署参数
* @param cause 部署失败的原因
*/

@Override
public void handleDeployFailed(
Vertx vertx, String mainVerticle, DeploymentOptions deploymentOptions, Throwable cause)
{
logger.error("[Vert.x] Start Vert.x Failed", cause);
super.handleDeployFailed(vertx, mainVerticle, deploymentOptions, cause);
}
}
复制代码

原文 

https://juejin.im/post/5e86a1f7f265da47da2ac9b1

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Vert.x源码分析之Launcher

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址