我一直在研究各种示例,但似乎无法找到摆脱奇怪角落的方法。根据我从 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。这会引发警告; 您已经在 Vert.x 上下文中,确定要创建新的 Vertx 实例吗?
我认为我不想要一个新实例(或者我想要吗?),所以我正在寻找一种使用 Vertx.currentContext().owner()
的方法,因为这是根我正在运行 Vertx。我不仅找不到将 VertxOptions 注入(inject)其中的方法,而且还无法部署 verticle,因为我收到了新的异常; [错误] i.v.c.i.DeploymentManager - NULL(java.lang.NullPointerException:null)
所以广泛的问题是;如何正确引导我的代码?更具体地说,该警告是预期的/正常的吗?如果没有,我如何实际注入(inject)指标并将 verticle 部署到根 Vertx 中?
提前计划,如果我也想使用集群,那么使用 main
和 bootstrap 是正确的方法吗?如果我这样做,我仍然可以利用 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());
}
关于java - 从 MainVerticle 引导 vert.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59475045/