我有一些标注为@RestClientTest的测试,该测试使用@LoadBalanced WebClient.Builder调用服务。我有一个MockWebServer在模拟正确的端口上运行该服务。我使用Ribbon进行负载平衡。测试运行时出现以下异常:
eactor.core.Exceptions$ReactiveException: java.net.UnknownHostException: orchestration
at reactor.core.Exceptions.propagate(Exceptions.java:326)
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:91)
at reactor.core.publisher.Mono.block(Mono.java:1494) ...
我的Bean定义:
@LoadBalanced
public WebClient.Builder asyncWebClientBuilder() {
TcpClient tcpClient = TcpClient.create()
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectTimeout) // Connection Timeout
.doOnConnected(connection ->
connection.addHandlerLast(new ReadTimeoutHandler(readTimeout))); // Read Timeout)
return WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(HttpClient.from(tcpClient)));
客户代码:
return client.build()
.method(method)
.uri(initUriTemplateHandler()
.expand(url, uriVariables))
.body(BodyInserters.fromObject(requestEntity))
.exchange()
.block();
奇怪的是,当我在真实环境中针对真实服务运行相同的客户端代码时,它们完全可以正常工作。我也有一些带有@SpringBootTest
注释的测试,并且在相同的客户端下使用了相同的客户端,这些客户端平衡了负载并可以正常工作。它仅在@RestClientTest
情况下不负载均衡。
我在这里想念的是什么?
我正在使用Spring Boot 2.1.3