1

我正在 quarkus ( 1.8.3.Final) 中实现一个 gprc 服务器。我的服务是用反应式编写的(smallrye mutiny)这是我的服务类

@Singleton
@Blocking
@Slf4j
public class GrpcService extends MutinyGrpcServicesGrpc.GrpcServicesImplBase{

  @Blocking
  public Uni<MyResponse> executeMyLogic(MyRequest request) {
     System.out.println("grpc thread name "+Thread.currentThread().getName());
     ...
  }
}

现在写在里面的实际逻辑executeMyLogic有点阻塞,导致vertx阻塞事件循环警告(和一些其他错误)。因此,正如 quarkus grpc 服务器指南(https://quarkus.io/guides/grpc-getting-started)中所述,我用@Blocking (io.smallrye.common.annotation.Blocking).

在我添加这个注释之前,我在 sys.out 上得到了这个日志, grpc thread name vert.x-eventloop-thread-0 这表明这个逻辑正在一个似乎导致问题的 vertx 事件循环上运行。

现在根据我的理解,在添加此 @Blocking 注释后executeMyLogic应该在某个工作线程上运行。但它仍然在 vertx 事件循环上运行。

看起来这个注释没有被框架所尊重。

如果我的理解有误,请纠正我,否则请帮助我完成这项工作。

4

1 回答 1

1

所以事实证明这是 quarkus 框架中的一个错误。早些时候它不尊重@Blocking 注释。它在升级到后工作1.10.2.Final

这是修复它的 PR 的链接

于 2020-12-31T08:48:26.713 回答