我试图为webServiceTemplate设置超时,但是当我执行marshalSendAndReceive()时,超时忽略了。请求大约需要5秒,但在coinfiguration中我设置了5毫秒。我试着用HttpComponentsMessageSender代替HttpWebServiceMessageSenderBuilder,但也没有效果。那么有没有办法解决这个问题呢?
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setPackagesToScan(applicationProps.getPackagesToScan());
return marshaller;
}
@Bean
public WebServiceTemplate webServiceTemplate(final WebServiceTemplateBuilder builder) {
return builder.setMarshaller(marshaller()).setUnmarshaller(marshaller())
.messageSenders(List.of(
new BasicAuthHttpsConnectionMessageSender(props.getUsername(), props.getPassword()),
new HttpWebServiceMessageSenderBuilder()
.setConnectTimeout(Duration.ofMillis(5))
.setReadTimeout(Duration.ofMillis(5)).build()
)).build();
}发布于 2021-10-26 11:39:40
这里,
new HttpWebServiceMessageSenderBuilder()
.setConnectTimeout(Duration.ofMillis(5))
.setReadTimeout(Duration.ofMillis(5)).build();你需要提供一个大的持续时间,即Duration.ofMillis(500),现在你就可以看到效果了。所以它就像是
new HttpWebServiceMessageSenderBuilder()
.setConnectTimeout(Duration.ofMillis(500))
.setReadTimeout(Duration.ofMillis(500)).build();5 millis的持续时间很短,所以你不会注意到它。请参阅here
发布于 2021-10-26 11:33:36
只需使用setConnectTimeout(5),而不是使用Duration.ofMillis(5)
@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setPackagesToScan(applicationProps.getPackagesToScan());
return marshaller;
}
@Bean
public WebServiceTemplate webServiceTemplate(final WebServiceTemplateBuilder
builder) {
return builder.setMarshaller(marshaller()).setUnmarshaller(marshaller())
.messageSenders(List.of(
new BasicAuthHttpsConnectionMessageSender(props.getUsername(), props.getPassword()),
new HttpWebServiceMessageSenderBuilder()
.setConnectTimeout(5)
.setReadTimeout(5).build()
)).build();}
https://stackoverflow.com/questions/69721867
复制相似问题