我知道超时是 client 的一个属性,但我们需要在 2 分钟内从 spring soap 端点发送响应。
如何在spring soap中超时并在指定时间内从soap生产者应用程序发送默认响应?
容器:Tomcat
@Endpoint
public class SOAPEndpoint {
private static final String NAMESPACE_URI = "http://spring.io/guides/gs-producing-web-service";
private Repository repository;
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "getData")
@ResponsePayload
public Response getCountry(@RequestPayload SampleRequest request) {
Response response = new Response();
response.setCountry(repository.retrieveData(request.getParam())); // this lines takes 5 minutes to respond
return response;
}
}
答案 0 :(得分:0)
我找不到基于配置的解决方案,但以下是可能的基于库的解决方案:
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "getCountryRequest")
@ResponsePayload
public GetCountryResponse getCountry(@RequestPayload GetCountryRequest request) {
GetCountryResponse response = new GetCountryResponse();
TimeLimiter timeLimiter = TimeLimiter.of(Duration.ofSeconds(1));
try {
Country country = timeLimiter.executeFutureSupplier(() ->
CompletableFuture.supplyAsync(() -> countryRepository.findCountry(request.getName())));
response.setCountry(country);
return response;
} catch (TimeoutException e) {
e.printStackTrace(); // handle timeout.
} catch (Exception e) {
e.printStackTrace(); // handle general error.
}
return null; // You may want to replace this.
}
上面的 Producer 代码来源于 - https://spring.io/guides/gs/producing-web-service/ 并针对消费者进行了测试 - https://spring.io/guides/gs/consuming-web-service/