Quarkus:在事件循环中阻止 grpc 服务方法 运行
Quarkus: Blocking grpc service method running on event loop
我正在 quarkus (1.8.3.Final
) 中实现一个 gprc 服务器。
我的服务是用反应式编写的(smallrye mutiny)
这是我的服务class
@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 事件循环中 运行,这似乎是导致问题的原因。
现在根据我的理解,在 executeMyLogic
上添加此 @Blocking 注释后,这应该 运行ning 在某些工作线程上。
但它仍然 运行ning on vertx 事件循环。
这个注解似乎没有被框架接受。
如果我的理解有误,请纠正我,否则请帮助我解决这个问题。
事实证明这是 quarkus 框架中的一个错误。
早些时候它不支持@Blocking 注释。
升级到 1.10.2.Final
后有效
我正在 quarkus (1.8.3.Final
) 中实现一个 gprc 服务器。
我的服务是用反应式编写的(smallrye mutiny)
这是我的服务class
@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 事件循环中 运行,这似乎是导致问题的原因。
现在根据我的理解,在 executeMyLogic
上添加此 @Blocking 注释后,这应该 运行ning 在某些工作线程上。
但它仍然 运行ning on vertx 事件循环。
这个注解似乎没有被框架接受。
如果我的理解有误,请纠正我,否则请帮助我解决这个问题。
事实证明这是 quarkus 框架中的一个错误。
早些时候它不支持@Blocking 注释。
升级到 1.10.2.Final