RestTemplate 是否同步 REST 调用?
Does RestTemplate synchronize REST calls?
我对 RestTemplate 的一件事很好奇。假设我有一个普通的 Spring 单例组件 bean RestService
和虚拟方法:
@Component
public class RestService {
private final RestTemplate restTemplate;
public String performRequest(HttpEntity request, URI url) {
return restTemplate.exchange(url, HttpMethod.POST, request, String.class);
}
}
现在线程 thread-1
与这个 bean 交互并等待休息响应。这是否意味着任何其他渴望通过此 bean 发出另一个请求的线程都将被卡住,直到 thread-1
释放 restTemplate
?我试图在下面的数字上展示流程。
thread-1 ..request....execution..................response..
thread-N ---------request.......wait..............start execution...
或
thread-1 ..request....execution..................response..
thread-N ---------request.......execution....response...
也就是说。可以通过多线程调用将此类服务与 restTemplate
一起使用吗?它是否像图 1 那样工作? 1 或图。 2?
RestTemplate
是 thread-safe(带有免责声明),因此您可以像在代码中所做的那样在多个用户之间共享一个。他们不需要等待对方,事实上他们甚至不知道是否有其他请求在同时执行。
class 的 javadoc 没有描述它是 thread-safe,但代码仅使用局部变量,因此没有共享状态可竞争。
免责声明:它并非完全没有共享状态,因为您可以配置一些东西,例如 setMessageConverters()
、setErrorHandler()
等,但这些应该只配置一次。做网络事情的实际方法是 thread-safe.
我对 RestTemplate 的一件事很好奇。假设我有一个普通的 Spring 单例组件 bean RestService
和虚拟方法:
@Component
public class RestService {
private final RestTemplate restTemplate;
public String performRequest(HttpEntity request, URI url) {
return restTemplate.exchange(url, HttpMethod.POST, request, String.class);
}
}
现在线程 thread-1
与这个 bean 交互并等待休息响应。这是否意味着任何其他渴望通过此 bean 发出另一个请求的线程都将被卡住,直到 thread-1
释放 restTemplate
?我试图在下面的数字上展示流程。
thread-1 ..request....execution..................response..
thread-N ---------request.......wait..............start execution...
或
thread-1 ..request....execution..................response..
thread-N ---------request.......execution....response...
也就是说。可以通过多线程调用将此类服务与 restTemplate
一起使用吗?它是否像图 1 那样工作? 1 或图。 2?
RestTemplate
是 thread-safe(带有免责声明),因此您可以像在代码中所做的那样在多个用户之间共享一个。他们不需要等待对方,事实上他们甚至不知道是否有其他请求在同时执行。
class 的 javadoc 没有描述它是 thread-safe,但代码仅使用局部变量,因此没有共享状态可竞争。
免责声明:它并非完全没有共享状态,因为您可以配置一些东西,例如 setMessageConverters()
、setErrorHandler()
等,但这些应该只配置一次。做网络事情的实际方法是 thread-safe.