Groovy Micronaut 的 @Client 注入 RxHttpClient 与 RxHttpClient.create 有什么区别?

What is the difference between Groovy Micronaut's @Client injected RxHttpClient vs RxHttpClient.create?

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

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

Create a new HttpClient. Note that this method should only be used outside of the context of an application. Within Micronaut use Inject to > inject a client instead.

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

@Client 注解将注入一个托管客户端,该客户端已依赖注入,并具有用于跟踪、传播等的附加检测功能。通过使用 create,Micronaut 无法依赖注入实例,因此某些功能框架将无法工作。

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

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

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

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

my:
  server: http://foo.com

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