【问题标题】:What is the difference between Groovy Micronaut's @Client injected RxHttpClient vs RxHttpClient.create?Groovy Micronaut 的 @Client 注入的 RxHttpClient 与 RxHttpClient.create 有什么区别?
【发布时间】:2018-09-22 03:44:37
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: groovy micronaut


    【解决方案1】:

    @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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      相关资源
      最近更新 更多