在Java微服务中获取连接超时错误

时间:2018-06-12 10:29:31

标签: spring spring-boot postman microservices

我使用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成功使用相同的服务,但不能通过我的微服务。

请协助就此提出建议。

3 个答案:

答案 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