当前位置: 首页 > 知识库问答 >
问题:

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

柯锋
2023-03-14

我正在quarkus中实现一个gprc服务器(1.8.3.Final)。我的服务是以反应式风格编写的(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上获得此日志。输出grpc线程名称垂直。x-eventloop-thread-0,表示此逻辑正在导致问题的vertx事件循环上运行。

现在根据我的理解,在添加了这个@阻塞注释后,这个注释应该在一些工作线程上运行。但它仍然运行在vertx事件循环上。

框架似乎不尊重这个注释。

纠正我,如果我的理解是错误的,否则请帮助我得到这个工作。

共有1个答案

常茂
2023-03-14

原来这是夸克斯框架中的一个错误。早些时候,它并不尊重@阻塞注释。它在升级到1.10.2后工作。最终代码

这是修复它的公关链接

 类似资料:
  • 问题内容: 以下示例在Node.js书中给出: 解释了while循环为何阻止执行时,作者说: 节点将永远不会执行超时回调,因为事件循环卡在了循环中,而循环在第7行开始了,因此永远不会给它处理超时事件的机会! 但是,作者没有解释为什么这是在事件循环的背景下发生的,还是在幕后真正发生了什么。 有人可以详细说明吗?为什么节点卡住?以及如何在保留控制结构的同时更改上述代码,以使事件循环不会被阻塞,并且代码

  • 问题内容: 我有以下5个文件: gui.py functions.py 线程处理程序 variables.py 和start.py 执行start.py之后,我收到消息:“ QCoreApplication:exec:事件循环已在运行 ” 我发现,这与计时器有关 从 start.py 和功能 在 functions.py中 有人可以向我解释问题是什么吗?我不知道代码有什么问题… 问题答案: 我认为

  • 我试图了解https://vertx.io/VerentleSystem和事件循环线程。 考虑下面的代码: 上面的代码将创建一个新的,它也拥有事件循环线程。 使用

  • 问题内容: 我正在尝试解决此错误:在我的异步过程中。我相信这是因为在任务仍未完成时发生故障,然后尝试关闭事件循环。我以为我需要在关闭事件循环之前等待其余的响应,但是我不确定如何在我的特定情况下正确完成该操作。 我该如何处理错误并正确关闭事件循环,以便可以启动一个新程序并从本质上重新启动整个程序并继续。 编辑: 根据这个答案,这就是我现在正在尝试的方法。不幸的是,这种错误很少发生,因此,除非我可以强

  • 本文向大家介绍JS阻止事件冒泡行为和闭包的方法,包括了JS阻止事件冒泡行为和闭包的方法的使用技巧和注意事项,需要的朋友参考一下 阻止事件冒泡行为,要是不阻止的话,点击div的时候也会同时触发body事件 html代码 css代码 js代码 以上所述是小编给大家介绍的JS阻止事件冒泡行为和闭包的方法的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家

  • 我们已经知道 Vert.x Api 是非阻塞,并且不会堵塞事件循环。 如果你堵塞事件循环,那事件循环将不能做别的事,因为它被阻塞了。如果所有的event loop被阻塞了,应用程序将完全停止! 所以不要这样做!你已经被警告。 阻塞的例子包括: Thread.sleep() 等待锁 等待互斥体或监视器 (例如同步段) 做一个长时间的数据库操作和等待返回 做复杂的计算,需要很长的时间。 死循环。 如果