我正在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事件循环上运行。
框架似乎不尊重这个注解。
纠正我,如果我的理解是错误的,否则请帮助我得到这个工作。
1条答案
按热度按时间soat7uwm1#
原来这是quarkus框架中的一个bug。早些时候,它不尊重@blocking注解。在升级到
1.10.2.Final
这是一个链接到公关,修复它