Vert.x 如何使用 Hibernate 作为非阻塞 ORM
How to use Hibernate as non-blocking ORM with Vert.x
我目前有一个 Vert.x
代码库。我使用的是 Golang,但 Golang 有点烂,而且没有好的 ORM。但显然,Vert.x 也没有好的 ORM,主要是因为 Vert.x 是非阻塞的,而 Java 的大多数 ORM 都是基于阻塞 API。
无论如何,我有一个具体的问题 - 我读到 Hibernate/JPA 可以与 Vert.x 一起使用 - 我们可以做的是将 Hibernate 调用放在不同的 Verticle 中,然后它就不会-阻塞。
这是个好主意吗?有人可以展示一个用 2 个不同的 Vert.x verticles 做这个的例子吗?
如果不是一个好主意,那么使用什么可能是一个好的 ORM?裸 SQL 调用一开始听起来很酷,但对于迁移和其他东西,可能会有点疯狂。
@tsegismont 和往常一样,已经在评论中提供了很好的解决方案。我只想澄清以下句子:
I read that Hibernate/JPA could be used with Vert.x - what we could do is put the Hibernate calls in a different Verticle and then it would be non-blocking
有一真一假:
Hibernate/JPA could be used with Vert.x
没错。通过将阻塞代码放在 worker Verticle 中,您不会阻塞 Vert.x 事件循环,并且允许基于 JDBC 的框架与 Vert.x
一起工作
put the Hibernate calls in a different Verticle and then it would be non-blocking
错误。您不会使 Hibernate 成为非阻塞的。 JDBC 本质上是阻塞的,解决这个问题的方法不多(尽管 R2DBC 是一个很好的举措)。您将使用与之前相同的线程池,但具有相同的限制。
我目前有一个 Vert.x
代码库。我使用的是 Golang,但 Golang 有点烂,而且没有好的 ORM。但显然,Vert.x 也没有好的 ORM,主要是因为 Vert.x 是非阻塞的,而 Java 的大多数 ORM 都是基于阻塞 API。
无论如何,我有一个具体的问题 - 我读到 Hibernate/JPA 可以与 Vert.x 一起使用 - 我们可以做的是将 Hibernate 调用放在不同的 Verticle 中,然后它就不会-阻塞。
这是个好主意吗?有人可以展示一个用 2 个不同的 Vert.x verticles 做这个的例子吗?
如果不是一个好主意,那么使用什么可能是一个好的 ORM?裸 SQL 调用一开始听起来很酷,但对于迁移和其他东西,可能会有点疯狂。
@tsegismont 和往常一样,已经在评论中提供了很好的解决方案。我只想澄清以下句子:
I read that Hibernate/JPA could be used with Vert.x - what we could do is put the Hibernate calls in a different Verticle and then it would be non-blocking
有一真一假:
Hibernate/JPA could be used with Vert.x
没错。通过将阻塞代码放在 worker Verticle 中,您不会阻塞 Vert.x 事件循环,并且允许基于 JDBC 的框架与 Vert.x
一起工作put the Hibernate calls in a different Verticle and then it would be non-blocking
错误。您不会使 Hibernate 成为非阻塞的。 JDBC 本质上是阻塞的,解决这个问题的方法不多(尽管 R2DBC 是一个很好的举措)。您将使用与之前相同的线程池,但具有相同的限制。