如何在HttpsUrlConnectionMessageSender中使用连接池 [英] How to use connection pooling with HttpsUrlConnectionMessageSender

查看:100
本文介绍了如何在HttpsUrlConnectionMessageSender中使用连接池的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to make a Soap request using Spring WS. The request needs to send across client certificate to the server. I have figured out the configuration that makes the correct request to the server. Code presented below

@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如何管理连接?它是否为每个请求创建新连接,还是具有内部连接池.我们如何在这里使用外部连接池?

Now I was wondering how does HttpsUrlConnectionMessageSender manage connections? Does it create new connection for every request or it has internal connection pooling. How do we use external connection pooling here?

推荐答案

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

The client has default connection pool of 20 and default connection pool per request 2.

但是您可以这样覆盖它:

But you can overwrite it like this:

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;
}

这篇关于如何在HttpsUrlConnectionMessageSender中使用连接池的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆