首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sping webServiceTemplate的setTimeout不工作

Sping webServiceTemplate的setTimeout不工作
EN

Stack Overflow用户
提问于 2021-10-26 10:59:55
回答 2查看 44关注 0票数 0

我试图为webServiceTemplate设置超时,但是当我执行marshalSendAndReceive()时,超时忽略了。请求大约需要5秒,但在coinfiguration中我设置了5毫秒。我试着用HttpComponentsMessageSender代替HttpWebServiceMessageSenderBuilder,但也没有效果。那么有没有办法解决这个问题呢?

代码语言:javascript
复制
@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();
}
EN

回答 2

Stack Overflow用户

发布于 2021-10-26 11:39:40

这里,

代码语言:javascript
复制
    new HttpWebServiceMessageSenderBuilder()
             .setConnectTimeout(Duration.ofMillis(5))
             .setReadTimeout(Duration.ofMillis(5)).build();

你需要提供一个大的持续时间,即Duration.ofMillis(500),现在你就可以看到效果了。所以它就像是

代码语言:javascript
复制
    new HttpWebServiceMessageSenderBuilder()
             .setConnectTimeout(Duration.ofMillis(500))
             .setReadTimeout(Duration.ofMillis(500)).build();

5 millis的持续时间很短,所以你不会注意到它。请参阅here

票数 1
EN

Stack Overflow用户

发布于 2021-10-26 11:33:36

只需使用setConnectTimeout(5),而不是使用Duration.ofMillis(5)

代码语言:javascript
复制
@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();

}

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69721867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档