在 Dropwizard 2.0.0 中检索 Jetty 实例



我们有一个在Dropwizard版本2.0.0-RC中制作的项目,我们使用REST端点。在一些问题之后,我们决定使用 gRPC 而不是使用 REST。有几个第三方库可以将 gRPC 连接到 Dropwizard,但我们认为它们有点过时且无法使用。因此,我们正在考虑实施Armeria及其GRPC解决方案。

为了实现这一点,我需要 Jetty 实例来附加 GRPC。

这就是我解决它的方法(GRPC 和 Armeria 之间的混合(:

Server server = Server.builder()
.http(8080)
.service(GrpcService.builder()...build())
.serviceUnder("/", JettyService.forServer(jettyServer))
.build();
server.start().join();

所以我需要jettyServer成为具有org.eclipse.jetty.server类型的 Jetty 实例。代码的其余部分是嵌入Jetty的Armerias方式。链接到嵌入码头。

如何检索 Jetty 的实例?

我能够通过使用Dropwizard生命周期来获取服务器来解决此问题。

// variable server is of type org.eclipse.jetty.server.Server
environment.lifecycle().addServerLifecycleListener(new ServerLifecycleListener() {
@Override
public void serverStarted(Server server) {
// ....
}
});

通过该实例,您可以使用 Armeria 附加 gRPC

我能够使用另一个答案的评论中提供的链接,并将此 PR 放在 Armeria 项目中以添加 dropwizard 模块。

https://github.com/line/armeria/pull/2236

它目前针对的是1.3.x而不是2.0,但是一旦存在稳定的版本,就需要升级。

编辑:PR被接受并合并

最新更新