Как resttemplate.exchange () выполняется в другом потоке? - PullRequest
1 голос
/ 24 марта 2019

Насколько я понимаю, вызов метода resttemplate для exchange выполняется в другом потоке.В основном все клиентские библиотеки выполняются в другом потоке.

Допустим, мой контейнер сервлетов - tomcat.Когда выполняется запрос к открытой конечной точке, поток Tomcat получает запрос, и запрос поступает на уровень обслуживания с уровня контроллера в том же потоке.На уровне обслуживания у меня есть вызов сторонней службе с помощью resttemplate.Когда вызывается метод exchange, внутренне операция выполняется в другом потоке и получает результат операции.

У меня есть вопрос относительно этого:

Откуда Resttemplate получает поток в основном изкакой пул потоков выполнить в другом потоке?

Я хотел бы знать, если выполнение resttemplate в другом потоке связано с пулом потоков Tomcat.

Кто-нибудь может пролить свет на это?

1 Ответ

0 голосов
/ 24 марта 2019

Когда выполняется запрос к открытой конечной точке, поток tomcat получает запрос, и запрос поступает на уровень обслуживания из уровня контроллера в том же потоке.

Это происходит, только если tomcatи Java-приложения находятся в одной и той же JVM (как во встроенном tomcat).В противном случае по умолчанию потоки Java создаются и уничтожаются без объединения в пул.Конечно, вы также можете создать пул потоков Java.

Каждый раз, когда через RestTemplate вызывается сторонний API, он создает новое соединение Http и закрывает его, как только это будет сделано.Вы можете создать собственный пул соединений RestTemplate, используя HttpComponentsClientHttpRequestFactory примерно так:

new org.springframework.web.client.RestTemplate(new HttpComponentsClientHttpRequestFactory())
...