我们将在本章中讨论的最后一个 MicroProfile 扩展是 REST 客户端扩展。此 API 的目标是为您提供一种类型安全的方式来在微服务架构中调用 REST 服务。
为了了解 REST 客户端 API,我们将使用它作为 Chapter06/rest-client 应用程序的模板。这个项目只不过是我们客户服务的精简版,它只包含接口而不是服务实现。在配置方面,我们在rest-client项目的pom.xml文件中添加了如下依赖:
接下来,我们用两个接口替换了具体的服务实现:一个名为 CustomerEndpointItf,另一个名为 OrdersEndpointItf。这是 CustomerEndpointITf:
这是 OrdersEndpointItf:
注意 @org.eclipse.microprofile.rest.client.inject.RegisterRestClient 注释,它使 REST 客户端可以使用 @org.eclipse.microprofile.rest.client 通过 CDI 注入。 inject.RestClient 注释。让我们在 CustomerEndpoint 中学习如何在实践中做到这一点:
如您所见,我们通过将执行委托给我们注册为 REST 客户端的接口来替换 REST 客户端实现。此时,您可能想知道 REST 客户端如何知道远程端点。这是一个很好的问题,答案包含在 application.properties 文件中:
从第一行可以看出,对 REST 客户端接口的所有请求都将导致对远程端点基本 URL 的调用,该 URL 使用以下表达式进行限定:
此外,REST 客户端接口的默认范围已配置为 singleton,它指示 Quarkus 将单例实例化一次,并在注入期间将其引用传递给其他对象。其他支持的范围值是 @Dependent、@ApplicationScoped 和 @RequestScoped,后者是默认值。查看 CDI 规范以获取有关不同范围的更多详细信息 (http://www.cdi-spec.org/
)。
为了运行测试,我们需要一个通过 http://localhost:8080/customers 端点返回 Customers 列表和 列表的应用程序通过 http://localhost:8080/orders 端点订购。为此,我们可以启动实现上述端点的任何版本的客户服务应用程序,如下所示:
让我们回到我们的例子:
现在,我们可以使用以下命令运行 REST 客户端测试:
您应该在控制台中看到以下输出:
这意味着您设法对远程客户端点运行完整的 CRUD 操作。作为证明,您应该能够看到在服务控制台上执行的 SQL 语句:
请注意,上述日志要求您已打开 SQL 跟踪,如 Chapter 5
,使用 Quarkus 管理数据持久性。