如何在 Quarkus 中检索托管 Router 实例

问题描述 投票:0回答:1

我按照 this 指南尝试直接使用 Vertx 和 Router,但我无法检索 Router 的托管实例。

我只是这样做:


@QuarkusMainpublic 
class Main {

  public static void main(String... args) {
    Quarkus.run(MyApp.class, args);
  }

  static class MyApp implements QuarkusApplication {

    @Override    
    public int run(String... args) {
      Router router = CDI.current().select(Router.class).get();
      Quarkus.waitForExit();
      return 0;
    }
  }
}

申请失败

CDI.current().select(Router.class).get();
和:
jakarta.enterprise.inject.UnsatisfiedResolutionException: No bean found for required type [interface io.vertx.ext.web.Router] and qualifiers [[]]

我的依赖如下:

dependencies {
    implementation(enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}"))
    implementation("io.quarkus:quarkus-resteasy-reactive-jackson")
    implementation("io.quarkus:quarkus-resteasy-reactive")
    implementation("io.quarkus:quarkus-arc")
    testImplementation("io.quarkus:quarkus-junit5")
    testImplementation("io.rest-assured:rest-assured")
}

此时上下文还没有完全初始化吗? 有什么想法吗?

更新

按照评论中的建议,我尝试添加指南中的确切依赖项:

dependencies {
  implementation(enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}"))
  implementation("io.quarkus:quarkus-arc")
  implementation("io.vertx:vertx-web")
  implementation("io.quarkus:quarkus-vertx-http")
  testImplementation("io.quarkus:quarkus-junit5")
  testImplementation("io.rest-assured:rest-assured")
}

但还是没有运气。

quarkus-vertx-http
之前就在类路径上并且是传递依赖,这就是为什么我没有专门添加它。 但是,不幸的是,这并没有解决问题。

quarkus vert.x
1个回答
0
投票

您所指的指南是为 Quarkus 1.11 编写的。也许,您正在使用更新的版本,它会更积极地删除“未使用的”bean,请参阅此处

您有两种选择如何获取

Router
:

  1. 通过
    @Inject
    获取(这是Quarkus的标准)
class MyApp implements QuarkusApplication {

  @Inject
  Router router;

  @Override    
  public int run(String... args) {
    router.get("/bye").handler(ctx -> {
      ctx.end("Goodbye.");
      Quarkus.asyncExit();
    });
    router.get().handler(ctx -> ctx.end("Hello from Quarkus!"));
    Quarkus.waitForExit();
    return 0;
  }
}
  1. 通过在您的
    Router
    中设置来指示 Quarkus ARC 不要删除
    application.properties
    bean:
quarkus.arc.unremovable-types=io.vertx.ext.web.Router
© www.soinside.com 2019 - 2024. All rights reserved.