首页 > 解决方案 > Groovy Micronaut 的 @Client 注入 RxHttpClient 与 RxHttpClient.create 有什么区别?

问题描述

我正在使用@ClientGroovy 中的注释创建一个 Micronaut HTTP 客户端,如果我使用静态常量以外的任何东西,编译器会抱怨。但是,这限制了我通过传入配置值来更改每个环境的 URL。

所以我尝试RxHttpClient.create(myUrl)在我的服务中使用,并且我发出的相同请求返回 403。RxHttpClient 文档说

创建一个新的 HttpClient。请注意,此方法只能在应用程序的上下文之外使用。在 Micronaut 中,使用 Inject 来 > 注入客户端。

这并不能解释为什么我不应该使用该create方法,而且我无法向不同环境中的不同服务器发出请求。我正在创建的两个客户端之间有什么区别?

标签: groovymicronaut

解决方案


@Client注释将注入一个已被依赖注入的托管客户端,该客户端具有用于跟踪、传播等的附加检测功能。通过使用Micronautcreate不能依赖注入实例,因此框架的某些功能将不起作用。

此外,create您必须确保手动close客户端,因为 Micronaut 无法管理生命周期并在应用程序关闭时彻底关闭客户端。

最后,关于使用静态常量 to @Client,这不会限制您,因为该值可以包含占位符。例如:

@Client("${my.server}")

然后在application.yml你可以配置:

my:
  server: http://foo.com

或者更好的是,您可以使用新的 HTTP 服务功能。请参阅https://docs.micronaut.io/latest/guide/index.html#serviceDiscoveryManual


推荐阅读