Как использовать пул соединений с HttpsUrlConnectionMessageSender

Я пытаюсь сделать запрос Soap с помощью Spring WS. Запрос необходимо отправить через клиентский сертификат на сервер. Я выяснил конфигурацию, которая делает правильный запрос к серверу. Код представлен ниже

@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 управляет соединениями? Создает ли оно новое соединение для каждого запроса или имеет внутренний пул соединений? Как мы используем здесь пул внешних соединений?

0 ответов

У клиента есть пул соединений по умолчанию 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;
}
Другие вопросы по тегам