Reactor Netty 的 proxy 方法返回配置后的客户端
在把 proxy() 返回的 HttpClient 传给 ReactorClientHttpConnector 之前先保存它;原客户端不会改变。
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 已经拿到的客户端。