我使用Java 8和SpringBoot 2构建了一个微服务。从这个微服务中,我试图使用另一个REST API服务。但是,我在Chrome上收到以下错误
java.lang.IllegalStateException:底层HTTP客户端已完成 没有发出回应。
2018-06-12 15:21:29.300 ERROR 17996 --- [ctor-http-nio-3] .a.w.r.e.DefaultErrorWebExceptionHandler:无法处理请求 [获取http://localhost:8080/category/search] io.netty.channel.AbstractChannel $ AnnotatedConnectException:Connection 超时:暂无信息:test.usdemo.xyz.com/92.54.41.24:443 at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)〜[na:1.8.0_171] at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) 〜[NA:1.8.0_171] 在io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:325) 〜[网状传输-4.1.24.Final.jar:4.1.24.Final] at io.netty.channel.nio.AbstractNioChannel $ AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340) 〜[网状传输-4.1.24.Final.jar:4.1.24.Final] 在io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:633) 〜[网状传输-4.1.24.Final.jar:4.1.24.Final] 在io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580) 〜[网状传输-4.1.24.Final.jar:4.1.24.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497) 〜[网状传输-4.1.24.Final.jar:4.1.24.Final] 在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459) 〜[网状传输-4.1.24.Final.jar:4.1.24.Final] at io.netty.util.concurrent.SingleThreadEventExecutor $ 5.run(SingleThreadEventExecutor.java:884) 〜[网状-共4.1.24.Final.jar:4.1.24.Final] at java.lang.Thread.run(Thread.java:748)~ [na:1.8.0_171]引起:java.net.ConnectException:连接定时 out:没有进一步的信息 ...省略了10个常见帧
我能够使用PostMan成功使用相同的服务,但不能通过我的微服务。
请协助就此提出建议。
答案 0 :(得分:0)
我不知道如何在上面编辑我自己的问题,因为我没有看到编辑选项,因此我在这里添加其他详细信息以获得我的查询的解析。
控制器类: -
@RestController
公共类CategorySearchController {
private final CategorySearchService categorySearchService;
@Autowired
public CategorySearchController(CategorySearchService categorySearchService) {
this.categorySearchService = categorySearchService;
}
@GetMapping(path = "/search-category")
public Mono<CategoryResponse> searchCategories(SearchRequest categorySearchRequest){
return categorySearchService
.searchCategories()
.switchIfEmpty(Mono.error(
new EntityNotFoundException("No category matching " + categorySearchRequest.getSearchTerm() + " was found")));
}
}
服务类: -
@Service
public class CategorySearchServiceImpl implements CategorySearchService {
private String baseUrl = "https://demo0954903.mockable.io";
@Override
public Mono<CategoryResponse> searchCategories() {
WebClient webClient = WebClient.create(baseUrl);
return webClient.
get()
.uri("/category-search")
.retrieve()
.bodyToMono(CategoryResponse.class);
}
}
答案 1 :(得分:0)
我找到了解决这个问题的方法。我需要在webclient中添加代理,如下所示: -
private final WebClient webClient;
ReactorClientHttpConnector connector = new ReactorClientHttpConnector(
options -> options.httpProxy(addressSpec -> {
return addressSpec.host(PROXY_HOST).port(PROXY_PORT);
}));
this.webClient = webClientBuilder.baseUrl(BASE_URL).clientConnector(connector).build();
答案 2 :(得分:0)
检查您的代理设置。在 Spring 应用程序中,您可以将以下内容添加到 VM 参数以设置您的代理: -Dhttp.proxyHost=your.proxy.net -Dhttp.proxyPort=8080