quarkus:阻止事件循环上运行的grpc服务方法

k4emjkb1  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(516)

我正在quarkus中实现一个gprc服务器( 1.8.3.Final ). 我的服务是写在React式风格(小黑麦兵变)这是我的服务类

@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事件循环上运行,而vertx事件循环似乎是导致此问题的原因。
现在根据我的理解在添加了这个@blocking注解之后 executeMyLogic 这应该在某个工作线程上运行。但它仍在vertx事件循环上运行。
框架似乎不尊重这个注解。
纠正我,如果我的理解是错误的,否则请帮助我得到这个工作。

soat7uwm

soat7uwm1#

原来这是quarkus框架中的一个bug。早些时候,它不尊重@blocking注解。在升级到 1.10.2.Final 这是一个链接到公关,修复它

相关问题