Reactor Netty 的 HttpClient 配置方法返回的是配置后的客户端引用。丢弃这个返回值,原引用就仍是原来的设置。

下面的代码创建了代理配置,随后又把它丢掉了:

HttpClient client = HttpClient.create();
client.proxy(spec -> spec.type(ProxyProvider.Proxy.HTTP)
    .host("proxy.example").port(8080));

应当改为保留返回的引用:

client = client.proxy(spec -> spec.type(ProxyProvider.Proxy.HTTP)
    .host("proxy.example").port(8080));

WebClient webClient = WebClient.builder()
    .clientConnector(new ReactorClientHttpConnector(client))
    .build();

涉及的类型是 Reactor Netty 的 HttpClient 与 ProxyProvider,以及 Spring 的 WebClient 与 ReactorClientHttpConnector。直接从 HttpClient.create() 开始链式调用,是保留返回配置的另一种写法。对于允许的公开 API 请求,HTTP 代理列表可为示例中的 host 和 port 提供候选。

设置响应超时或重定向处理时同样适用这套检查。应当阅读方法的返回约定,而不是假定 setter 会修改原对象。

还要追踪究竟是哪个引用传到了 connector。构造 connector 之后再重新赋值局部变量,并不会替换 connector 已经拿到的客户端。

相关文章