转载

Vert.x源码分析之Launcher

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

Vert.x 生命周期中的事件

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

afterConfigParsed

这是 Vert.x 启动前的钩子,在这个阶段, Vert.xOptions 还可以被更新。入参 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
正文到此结束
Loading...