spring-boot - Spring Boot:使用不同配置扩展/编辑 Apache HttpClientBuilder?
问题描述
我遇到了 Apache HttpComponents HttpClient 的架构问题。
我们有一个系统,我们有几个不同的远程端点要联系,每个端点都有一些不同的配置,如 ssl、基本身份验证等。
我正在使用 Spring Boot 和 Cloud Sleuth,从中可以得到HttpClientBuilder
跟踪和其他功能。我想重用它, HttpClientBuilder
但除此之外,为每个唯一的端点添加我自己的特定配置。
但问题是方法HttpCientBuilder
不是不可变的,构建器上withXYZ()
也没有copy
orclone
方法,因此我无法复制原始内容并仅更改我的特定更改而不更改基础HttpClientBuilder
并与使用的其他人发生冲突构建器的相同实例。无论是线程之间的竞争条件还是不同端点之间的冲突配置。
在 Spring Boot 项目中,我看到他们似乎想要做类似的事情的一个HttpClientConfiguration
地方是Spring Cloud Commons
,它创建了一个自己的ApacheHttpClientFactory
,它采用原始的自动装配HttpClientBuilder
然后设置disableContentCompression()
,disableCookieManagement()
并且useSystemProperties()
- 但它似乎对HttpClientBuilder
which的原始实例进行了操作对我来说似乎完全错误。它将改变所有构建的HttpClient
工作方式,而不仅仅是他们稍后将HttpClientRibbonConfiguration
在Spring Cloud Netflix Ribbon
. 隐藏的潜在错误?对我来说似乎是这样,因为它高度依赖于调用顺序。
有谁知道应该如何解决这样的问题?
我可以做的一个简单的替代方法是不要尝试在HttpClientBuilder
Sleuth 给定的基础上进行构建,而是在每次需要时从头开始构建一个全新的,并检查HttpTracing
bean 是否可用并使用TracingHttpCientBuilder
而不是HttpClientBuilder
in这种情况,但这似乎违反直觉。
解决方案
我遇到了完全相同的问题。但是,我可以选择定义自己的HttpClientBuilder
bean。我不确定你是否处于相同的位置?
但是通过使 bean 范围“原型”每次注入某个地方时都会创建一个新的 bean 实例。然后我可以在注入后安全地修改 HttpClientBuilder 。
@Bean
@Scope("prototype")
public HttpClientBuilder tracingHttpClientBuilder(..) {
...
}
推荐阅读
- matlab - graycomatrix 的 NumLevels 和 GrayLimits 是一回事吗 MATLAB
- c# - 基于实例化对象创建游戏对象或组件
- django - Django根据条件更改模型关系(是否为员工)
- express - 没有(不推荐使用?)body-parser,express-validator 不起作用
- c++ - 使用循环不使用乘法运算符将实数(分数)相乘的程序
- jhipster - 具有遗留 REST 服务的 JHipster 网关
- ubuntu - Ansible playbook 安装失败
- r - 将相同的字符串状态应用于具有相似应用程序 ID 和用户 ID 的所有行
- php - 在 WooCommerce 中向“缺货”产品变体添加联系表
- android - Retrofit 从基本 url 中删除查询参数