Netty AsyncRestTemplate Https URL - 由对等方重置连接

时间:2017-05-17 03:51:20

标签: spring spring-mvc netty

我正在使用`Netty4ClientHttpRequestFactory来配置asyncresttemplate,

public AsyncRestTemplate asyncRestTemplate(Netty4ClientHttpRequestFactory netty4ClientHttpRequestFactory,
                                               @Qualifier("AsyncClientLoggingInterceptor") AsyncClientHttpRequestInterceptor clientHttpRequestInterceptor) {
        AsyncRestTemplate restTemplate = new AsyncRestTemplate(netty4ClientHttpRequestFactory);
        List<AsyncClientHttpRequestInterceptor> interceptors = new ArrayList<>();
        interceptors.add(clientHttpRequestInterceptor);
        restTemplate.setInterceptors(Collections.unmodifiableList(interceptors));
        return restTemplate;
    }

    @Bean(name = "netty4ClientHttpRequestFactory")
    public Netty4ClientHttpRequestFactory netty4ClientHttpRequestFactory() {
        Netty4ClientHttpRequestFactory netty4ClientHttpRequestFactory = new Netty4ClientHttpRequestFactory();
        netty4ClientHttpRequestFactory.setConnectTimeout(CONNECT_TIMEOUT);
        netty4ClientHttpRequestFactory.setReadTimeout(CONNECT_TIMEOUT);
        return netty4ClientHttpRequestFactory;
    }


ListenableFuture<ResponseEntity<Void>> future =
                asyncRestTemplate.exchange(message.getToUrl(), HttpMethod.POST, httpEntity, Void.class);

使用HTTP POST一切正常,但是使用Https会抛出以下异常,

   java.io.IOException: Connection reset by peer
    at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[?:1.8.0_74]
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) ~[?:1.8.0_74]
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[?:1.8.0_74]
    at sun.nio.ch.IOUtil.read(IOUtil.java:192) ~[?:1.8.0_74]
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) ~[?:1.8.0_74]
    at io.netty.buffer.PooledUnsafeDirectByteBuf.setBytes(PooledUnsafeDirectByteBuf.java:288) ~[netty-all-4.1.9.Final.jar:4.1.9.Final]
    at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1100) ~[netty-all-4.1.9.Final.jar:4.1.9.Final]
    at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:372) ~[netty-all-4.1.9.Final.jar:4.1.9.Final]
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:123) [netty-all-4.1.9.Final.jar:4.1.9.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:624) [netty-all-4.1.9.Final.jar:4.1.9.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:559) [netty-all-4.1.9.Final.jar:4.1.9.Final]
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:476) [netty-all-4.1.9.Final.jar:4.1.9.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:438) [netty-all-4.1.9.Final.jar:4.1.9.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) [netty-all-4.1.9.Final.jar:4.1.9.Final]
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144) [netty-all-4.1.9.Final.jar:4.1.9.Final]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_74]

1 个答案:

答案 0 :(得分:1)

出现错误消息“由对等方重置连接”的原因是,客户端正在等待来自远程服务的响应并且连接过早关闭。

我使用

配置了Netty4ClientHttpRequestFactory
netty4ClientHttpRequestFactory.setSslContext(SslContextBuilder.forClient().build());