简体   繁体   English

使用 spring boot # SOAP 服务调用多个并行调用 SOAP 服务

[英]Calling multiple parallel call to SOAP services using spring boot # SOAP Service

I am currently using spring boot.我目前正在使用 spring 引导。 I have a list of request objects (around 1000) and would like to call SOAP services in parallel for all the objects and get the response for all of them.我有一个请求对象列表(大约 1000 个),并且想为所有对象并行调用 SOAP 服务并获得所有对象的响应。 Once all the request is processed, I want to execute my program in parallel.处理完所有请求后,我想并行执行我的程序。

Any good recommendations?有什么好的推荐吗?

public class ServiceImpl implements Service {

    @Autowired
    private SOAPConnector connector;

    public void getEmployeeData(){
    List<Request> lstRequest = [List of Objects];
    List<Response> lstResponse = new ArrayList();
    for(int i=0 ; i <=lstRequest.size()-1; i++)
    {       
        lstResponse.add(connector.callEmployeeService());
    }   
        callAnotherMethod(lstResponse);
    }
}


public class SOAPConnector extends WebServiceGatewaySupport {

    public Response callEmployeeService(Request request) {        
        try{
            return (Response) getWebServiceTemplate().marshalSendAndReceive(request);
        } catch (Exception e) {            

        }
    }
}


@Configuration
public class Configurator {

    @Value("${service.url}")
    private String SERVICE_URL;

    @Autowired
    ComponentMessageSender httpComponentsMessageSender;

    @Bean
    public SOAPConnector getClient() {
        SOAPConnector client = new SOAPConnector();
        client.setMarshaller(getMarshaller());
        client.setUnmarshaller(getMarshaller());
        client.setDefaultUri(SERVICE_URL);

        try {
            client.setMessageSender(httpComponentsMessageSender.getHttpComponentsMessageSender());

        } catch (Exception e){
            System.out.println("error on message sender ");
        }

        return client;
    }

    private Jaxb2Marshaller getMarshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setClassesToBeBound(Request.class, Response.class);
        return marshaller;
    }
}

Please have a look at Java 8's CompletableFuture .请查看 Java 8 的CompletableFuture You can have a go as follows:你可以有一个 go 如下:

List<Request> lstRequest = [List of Objects];
CompletableFuture[] futures = new CompletableFuture[lstRequest.size()];

for(int i=0 ; i <=lstRequest.length - 1; i++) {       
    futures[i] = CompletableFuture.supplyAsync(() -> connector.callEmployeeService());
}   

CompletableFuture.allOf(lstResponse).thenApply((result) -> {
    // This is where you get all of your responses
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM