如何将连接池与 HttpsUrlConnectionMessageSender 结合使用

问题描述 投票:0回答:2

我正在尝试使用 Spring WS 发出 Soap 请求。该请求需要跨客户端证书发送到服务器。我已经弄清楚向服务器发出正确请求的配置。代码如下

@Bean
    public HttpsUrlConnectionMessageSender messageSender() throws Exception {
        HttpsUrlConnectionMessageSender httpsUrlConnectionMessageSender = new HttpsUrlConnectionMessageSender();
        httpsUrlConnectionMessageSender.setTrustManagers(<TrustManager>);
        httpsUrlConnectionMessageSender.setKeyManagers(<KeyManager>);
        httpsUrlConnectionMessageSender.setHostnameVerifier(new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        });
        return httpsUrlConnectionMessageSender;
    }

    @Bean
    @Scope
    public WebServiceTemplate webServiceTemplate() throws Exception {
        WebServiceTemplate webServiceTemplate = new WebServiceTemplate(<messageFactory>);
        webServiceTemplate.setMarshaller(<jaxb2Marshaller>);
        webServiceTemplate.setUnmarshaller(<jaxb2Marshaller>);
        webServiceTemplate.setDefaultUri(<URL>);
        webServiceTemplate.setMessageSender(());
        return webServiceTemplate;
    }

现在我想知道 HttpsUrlConnectionMessageSender 如何管理连接?它是否为每个请求创建新连接,或者是否具有内部连接池。这里我们如何使用外部连接池?

java soap connection-pooling spring-ws
2个回答
3
投票

客户端的默认连接池为 20 个,每个请求的默认连接池为 2 个。

但是你可以像这样覆盖它:

public HttpComponentsMessageSender httpComponentsMessageSender(Integer readTimeout, Integer connectionTimeOut,
            Integer throttlingLimit) {
    HttpComponentsMessageSender sender = new HttpComponentsMessageSender();
    sender.setReadTimeout(readTimeout);
    sender.setConnectionTimeout(connectionTimeOut);
    PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
    CloseableHttpClient poolingHttpSoapClient = HttpClients.custom().setConnectionManager(connManager)
            .addInterceptorFirst(new RemoveSoapHeadersInterceptor()).setMaxConnPerRoute(throttlingLimit)
            .setMaxConnTotal(throttlingLimit + 1).build();
    sender.setHttpClient(poolingHttpSoapClient);
    return sender;
}

0
投票

您是否能够解决 HttpsUrlConnectionMessageSender 的连接池问题?因为我也有同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.