首页 > 解决方案 > 反应式微服务间通信 vert.x(强调反应式)

问题描述

导航异步、非阻塞和反应性是少数……给定 2 个非阻塞、反应性、基于 vert.x/quarkus 的微服务 A 和 B,其中约束是 A 必须通过 http 与 B 通信。如果我想保持服务 A 反应性(非阻塞):

  1. 我应该使用 vertx-web-client 吗?文档声明它是一个异步客户端,但我认为 vert.x 也基于它的非阻塞?(我在这里区分异步和非阻塞)
  2. 在 Quarkus 中,我看到使用了特定于 Mutiny 的 vertx-web-client 的克隆/兄弟。这是为了让我们可以使用 Mutiny 更高级别的 API(如 Uni/Multi)。我还会得到相同的非阻塞“反应性”吗?
  3. Java 11 有一个新的 Web 客户端,它被声明为异步和反应式(我认为反应式是在支持反应式流的意义上。不确定它的含义是否相同)。如果我尝试在我的服务 A 中使用它与 B 进行通信,我还会获得非阻塞性质吗?还是会因为它不是基于 vert.x 并且不使用 netty 而破坏它?就像我说的那样,我手足无措,头脑爆炸了:)

任何帮助都会很棒。谢谢

标签: vert.xquarkusmutinyvert.x-webclient

解决方案


您可以使用具有异步和非阻塞 API 的 Vert.x Web 客户端。

Vert.x Web 客户端的 Mutiny API 适用于 Quarkus 和 Vert.x。它的工作原理与纯 Vert.x Web 客户端相同,只是 API 基于UniMulti.

我对 JDK11 HTTP 客户端不是很了解。如果您的微服务 A 只向微服务 B 发送 HTTP 请求,那么也许使用 JDK HTTP 客户端就可以了。但通常,微服务也会接收消息(HTTP、Kafka 等)并与数据库交互。在这种情况下,利用工具包/框架的集成是有意义的。


推荐阅读