Quarkus GRPC 服务器无法启动

Posted

技术标签:

【中文标题】Quarkus GRPC 服务器无法启动【英文标题】:Quarkus GRPC server doesn't start 【发布时间】:2021-10-03 09:23:16 【问题描述】:

我正在尝试将 GRPC 与 Quarkus 一起使用,following the guide(编辑:我使用的是 1.13.7.Final 版本,因此使用稍旧的指南,因为 @GrpcService 在 v2 中已更改)我有 io .quarkus:quarkus-grpc 依赖于我的 pom,我可以编写一个 proto 文件并生成 java 类。然后我扩展了实现基础(见下文)。但是在启动应用程序时,默认端口 9000 上没有启动服务器,并且在日志中没有错误,唯一提到我的服务是 Remove unused class bean 和类名。

这是我的实现类的样子(不包括导入):

@Singleton
public class HelloService extends MutinyGreeterGrpc.GreeterImplBase 
  @Override
  public Uni<HelloReply> sayHello(HelloRequest request) 
    return Uni.createFrom().item(() -> HelloReply.newBuilder().setName(request.getName()).build());
  

我可能遗漏了什么明显的东西?

其他尝试:

我从 github 查看了 quarkusio/quarkus-quickstarts,更改为 1.13.7.Final 标签,然后运行 ​​mvn clean compile quarkus:dev,我收到以下错误(大致):

javax.enterprise.inject.spi.DeploymentException: Found 2 deployment problems:
[1] Unsatisfied dependency for type examples.GteeterGrpc$GreeterBlockingStub and qualifiers [@Default]
  - java member: io.quarkus.grpc.examples.hello.HelloWorldEnpoint#blockingHelloService
  - declared on CLASS bean [types=[io.quarkus.grpc.examples.hello.HelloWorldEnpoing, java.lang.Object]. qualifiers=[@Default, @Any], target=io.quarkus.grpc.examples.hello.HelloWorldEnpoint]

这是在运行 openjdk 11.0.11 的 Ubuntu 20.04 上

【问题讨论】:

【参考方案1】:

我猜您正在使用比 1.11 更新的 Quarkus 版本并使用 1.11 的指南(这是您链接的内容)。

在最近的 Quarkus 版本中,gRPC 服务的实现必须使用 @GrpcService 注释(而不是 @Singleton - 以前是这样的)。所以你的班级应该是这样的:

@GrpcService
public class HelloService extends MutinyGreeterGrpc.GreeterImplBase 
  @Override
  public Uni<HelloReply> sayHello(HelloRequest request) 
    return Uni.createFrom().item(() -> HelloReply.newBuilder().setName(request.getName()).build());
  

当前版本指南:https://quarkus.io/guides/grpc-service-implementation

【讨论】:

啊,我的意思是说,我使用的是 1.13.7.Final,它似乎没有 @GrpcService 注释。将更新问题。 这应该可以工作。请使用小型复制器在 github 问题中创建问题。 另外,如果可能的话,也许更新到 Quarkus 2.x 看看它是否适合你?

以上是关于Quarkus GRPC 服务器无法启动的主要内容,如果未能解决你的问题,请参考以下文章

grpc:服务器重新启动后大约 15 秒无法恢复连接

docker无法启动,报错grpc: addrConn.createTransport failed to connect to {unix:///run/containerd/containerd.

Quarkus gRPC 构建问题

Quarkus 阻塞 grpc vert.x 事件循环错误

quarkus 使用啥应用服务器?

如何在 Gradle 中使用 Quarkus gRPC 扩展?