apache / shenyu

Apache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.
https://shenyu.apache.org/
Apache License 2.0
8.4k stars 2.91k forks source link

httpClient#doOnConnected invalid #5522

Open wormsStorm opened 5 months ago

wormsStorm commented 5 months ago

Is there an existing issue for this?

Current Behavior

@Override
protected HttpClient createInstance() {
    // configure pool resources.
    HttpClientProperties.Pool pool = properties.getPool();
    ConnectionProvider connectionProvider = buildConnectionProvider(pool);
    HttpClient httpClient = HttpClient.create(connectionProvider)
            .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, properties.getConnectTimeout());
    if (serverProperties.getHttp2().isEnabled()) {
        httpClient = httpClient.protocol(HttpProtocol.HTTP11, HttpProtocol.H2);
    }
    HttpClientProperties.Proxy proxy = properties.getProxy();
    if (StringUtils.isNotEmpty(proxy.getHost())) {
        httpClient = setHttpClientProxy(httpClient, proxy);
    }
    httpClient.doOnConnected(connection -> {
        connection.addHandlerLast(new IdleStateHandler(properties.getReaderIdleTime(), properties.getWriterIdleTime(), properties.getAllIdleTime(), TimeUnit.MILLISECONDS));
        connection.addHandlerLast(new WriteTimeoutHandler(properties.getWriteTimeout(), TimeUnit.MILLISECONDS));
        connection.addHandlerLast(new ReadTimeoutHandler(properties.getReadTimeout(), TimeUnit.MILLISECONDS));
    });
    if (Objects.nonNull(loopResources)) {
        httpClient.runOn(loopResources);
    }
    HttpClientProperties.Ssl ssl = properties.getSsl();
    if (StringUtils.isNotEmpty(ssl.getKeyStorePath())
            || ArrayUtils.isNotEmpty(ssl.getTrustedX509CertificatesForTrustManager())
            || ssl.isUseInsecureTrustManager()) {
        httpClient = httpClient.secure(sslContextSpec -> setSsl(sslContextSpec, ssl));
    }
    if (properties.isWiretap()) {
        httpClient = httpClient.wiretap(true);
    }
    // set to false, fix java.io.IOException: Connection reset by peer
    // see https://github.com/reactor/reactor-netty/issues/388
    return httpClient.keepAlive(properties.isKeepAlive());
}

Expected Behavior

@Override
protected HttpClient createInstance() {
    // configure pool resources.
    HttpClientProperties.Pool pool = properties.getPool();
    ConnectionProvider connectionProvider = buildConnectionProvider(pool);
    HttpClient httpClient = HttpClient.create(connectionProvider)
            .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, properties.getConnectTimeout());
    if (serverProperties.getHttp2().isEnabled()) {
        httpClient = httpClient.protocol(HttpProtocol.HTTP11, HttpProtocol.H2);
    }
    HttpClientProperties.Proxy proxy = properties.getProxy();
    if (StringUtils.isNotEmpty(proxy.getHost())) {
        httpClient = setHttpClientProxy(httpClient, proxy);
    }
   // The httpClient needs to be reassigned
   // The httpClient needs to be reassigned
   // The httpClient needs to be reassigned
    httpClient = httpClient.doOnConnected(connection -> {
        connection.addHandlerLast(new IdleStateHandler(properties.getReaderIdleTime(), properties.getWriterIdleTime(), properties.getAllIdleTime(), TimeUnit.MILLISECONDS));
        connection.addHandlerLast(new WriteTimeoutHandler(properties.getWriteTimeout(), TimeUnit.MILLISECONDS));
        connection.addHandlerLast(new ReadTimeoutHandler(properties.getReadTimeout(), TimeUnit.MILLISECONDS));
    });
    if (Objects.nonNull(loopResources)) {
       // The httpClient needs to be reassigned
       // The httpClient needs to be reassigned
       // The httpClient needs to be reassigned
        httpClient = httpClient.runOn(loopResources);
    }
    HttpClientProperties.Ssl ssl = properties.getSsl();
    if (StringUtils.isNotEmpty(ssl.getKeyStorePath())
            || ArrayUtils.isNotEmpty(ssl.getTrustedX509CertificatesForTrustManager())
            || ssl.isUseInsecureTrustManager()) {
        httpClient = httpClient.secure(sslContextSpec -> setSsl(sslContextSpec, ssl));
    }
    if (properties.isWiretap()) {
        httpClient = httpClient.wiretap(true);
    }
    // set to false, fix java.io.IOException: Connection reset by peer
    // see https://github.com/reactor/reactor-netty/issues/388
    return httpClient.keepAlive(properties.isKeepAlive());
}

Steps To Reproduce

no

Environment

ShenYu version(s):2.6.1

Debug logs

no

Anything else?

no

Aias00 commented 4 months ago

could u pls describe what the change for ?