我们在weblogic服务器上部署了一个spring应用程序。我们的项目中有一个REST Web服务。这是一个POST电话。在这个Web服务的请求主体中,有一个名字。当我们调用我们的web服务时,它在内部使用RestTemplate调用其他web服务。
现在我们需要在每个请求中传递10个以上的名称,然后我们的Web服务应该调用其他Web服务10次。我们需要使它成为多线程调用。
所以我们使用的是ThreadPoolTaskExecutor。以下是相同的代码。
<bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="3"></property>
<property name="maxPoolSize" value="4"></property>
<property name="WaitForTasksToCompleteOnShutdown" value="true">
</property>
</bean>
public class ApplicationDirectorImpl{
@Autowired
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
....
....
public CustomResponseObject method(){
....
....
List<Future<FutureCustomResponse>> fList = new ArrayList<Future<FutureCustomResponse>>();
for(String name : nameList){
Future<FutureCustomResponse> fut = threadPoolTaskExecutor.submit(new Task(name));
fList.add(fut);
}
for(Future f: fList){
FutureCustomResponse fuResponse = f.get();
}
}
}
public class Task implements Callable<FutureCustomResponse>{
private String name;
public call() throws Exception{
System.out.println("name" + name + " performed by " + Thread.currentThread().getName());
return NameBuild.getPersonalInfo(this.name);
}
}
现在,当一个请求带有5个名称时,它应由这3个线程提供服务。
我们有2台服务器,因此我们的应用程序将有2个实例。因此,将为每个服务器创建线程池或在2个服务器之间创建公共线程池。 那么总共将创建多少个线程?每台服务器3个或每个应用3个?