我一直在玩各种示例,似乎无法走出奇怪的角落。根据我从vertx.io获得的入门工具包,MainVerticle是我的切入点。由于我想连接一些指标,所以我这样做;
public void start(Promise<Void> startPromise) {
...
MetricsOptions metricsOptions = new MicrometerMetricsOptions()
.setPrometheusOptions(new VertxPrometheusOptions().setEnabled(true))
.setEnabled(true);
VertxOptions vertxOptions = new VertxOptions().setMetricsOptions(metricsOptions);
Vertx vertx = Vertx.vertx(vertxOptions);
DeploymentOptions deploymentOptions = new DeploymentOptions().setInstances(2);
vertx.deployVerticle(ApiRootVerticle.class, deploymentOptions);
...
}
所以基本上创建我的VertxOptions
,创建一个新的vertx实例,然后部署我的Verticle。这引发了警告; You're already on a Vert.x context, are you sure you want to create a new Vertx instance?
我假设我不需要新实例(还是我想要?),所以我正在寻找一种使用Vertx.currentContext().owner()
的方法,因为这是我正在运行的根Vertx。我不仅找不到将VertxOptions
注入其中的方法,而且由于出现新的异常,也无法部署verticle。 [ERROR] i.v.c.i.DeploymentManager - NULL (java.lang.NullPointerException: null)
因此,广泛的问题是;如何正确引导我的代码?更具体地说,该警告是预期的/正常的吗?如果没有,我该如何实际注入指标并将顶点部署到根Vertx中?
[如果我也想使用聚类,请预先计划,使用main
并从那里引导是正确的方法吗?如果这样做,我仍然可以利用gradle重建和重新部署更改的魔力吗?
您绝对不想在您的Verticle中启动Vert.x实例:
Vertx vertx = Vertx.vertx(vertxOptions);
有几种方法可以控制Vert.x的启动选项,但我建议您只是去老式学校,然后亲自启动它:
public static void main(String[] args) {
MetricsOptions metricsOptions = new MicrometerMetricsOptions()
.setPrometheusOptions(new VertxPrometheusOptions().setEnabled(true))
.setEnabled(true);
VertxOptions vertxOptions = new VertxOptions().setMetricsOptions(metricsOptions);
Vertx vertx = Vertx.vertx(vertxOptions);
vertx.deployVerticle(new MainVerticle());
}