【问题标题】:TimeOut in Thread with a query from io.vertx.ext.sql.SQLClient;来自 io.vertx.ext.sql.SQLClient 的查询在线程中超时;
【发布时间】:2020-08-15 12:23:49
【问题描述】:

嗯,我是 Vert.x 的新开发人员...所以,我在实现数据库连接时遇到了问题。

在一个或多个查询中,我有很多信息,比如 160K 条记录,这些记录将在 JSON 对象中抛出 GraphQL;所以...当查询时间超过 30000(ms)...控制台说:

Thread Thread[vert.x-eventloop-thread-1,5,main] 已被阻塞5026 ms,时间限制为2000 ms io.vertx.core.VertxException:线程阻塞

所以我对此进行了调查,但在这些完成或获取所有记录之前,我无法找到解决、最大化或为查询设置更大值的方法。

【问题讨论】:

    标签: sql postgresql datasource vert.x sqlclient


    【解决方案1】:

    这个问题其实在official documentation中有详细的介绍。

    您不能直接从事件循环中调用阻塞操作,因为 这会阻止它做任何其他有用的工作

    这就是您目前正在做的事情 - 调用阻塞操作。

    另一种运行阻塞代码的方法是使用工作节点 A worker verticle 总是使用工作池中的线程执行。

    在工作程序 Verticle 中运行您的“慢”代码。使用EventBus 在 EventLoop verticles 和 worker 之间进行通信。只要您在同一个虚拟机中,通过 EventBus 传递大型集合也不会产生任何开销。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-16
      • 2018-05-08
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多