Spring integration soap请求和应答的spring集成网关中的超时问题
在设置从我的接口(使用spring集成)到ESB接口的soap请求的超时时,我面临一些难题。在向ESB接口发送请求时,我将请求超时设置为5000ms,回复超时设置为5000ms,但如果ESB接口上的服务关闭,请求在期望的5000ms(5秒)超时时间内不会超时,有时超时时间为40秒或更长。我尝试在int:gateway配置中使用默认请求超时和默认回复超时选项,但问题相同。请参阅完成以下配置:Spring integration soap请求和应答的spring集成网关中的超时问题,spring-integration,Spring Integration,在设置从我的接口(使用spring集成)到ESB接口的soap请求的超时时,我面临一些难题。在向ESB接口发送请求时,我将请求超时设置为5000ms,回复超时设置为5000ms,但如果ESB接口上的服务关闭,请求在期望的5000ms(5秒)超时时间内不会超时,有时超时时间为40秒或更长。我尝试在int:gateway配置中使用默认请求超时和默认回复超时选项,但问题相同。请参阅完成以下配置: <int:gateway id="SoapESBGateway" servi
<int:gateway id="SoapESBGateway"
service-interface="test.soap.service.ServiceSoap">
<int:method name="ServiceResponse"
request-channel="RequestChannel" reply-channel="ReplyChannel"
request-timeout="5000" reply-timeout="5000" />
</int:gateway>
<int:chain input-channel="RequestChannel" output-channel="ReplyChannel">
<int-xml:marshalling-transformer marshaller="marshaller" result-transformer="resultTransformer"></int-xml:marshalling-transformer>
<int:transformer ref="TransformerBean" method="transformMethod"></int:transformer>
<int-ws:outbound-gateway id="ws-SoapESB-gateway" ignore-empty-responses="true" uri="${soap.URI}"></int-ws:outbound-gateway>
<int:transformer ref="TransformerBean" method="transformMethod"></int:transformer>
<int-xml:unmarshalling-transformer unmarshaller="marshaller"></int-xml:unmarshalling-transformer>
</int:chain>
<bean id="resultTransformer" class="org.springframework.integration.xml.transformer.ResultToStringTransformer" />
<bean id="TransformerBean" class="test.TransformerImpl"></bean>
如果在设置超时选项时遗漏了什么,请告诉我
谢谢,
维奈A
更新:
<int:gateway id="SoapESBGateway"
service-interface="test.soap.service.ServiceSoap">
<int:method name="ServiceResponse"
request-channel="RequestChannel" reply-timeout="5000" />
</int:gateway>
<int:chain input-channel="RequestChannel">
<int-xml:marshalling-transformer marshaller="marshaller" result-transformer="resultTransformer"></int-xml:marshalling-transformer>
<int:transformer ref="TransformerBean" method="transformMethod"></int:transformer>
<int-ws:outbound-gateway id="ws-SoapESB-gateway" ignore-empty-responses="true" uri="${soap.URI}" message-sender="messageSender"></int-ws:outbound-gateway>
<int:transformer ref="TransformerBean" method="transformMethod"></int:transformer>
<int-xml:unmarshalling-transformer unmarshaller="marshaller"></int-xml:unmarshalling-transformer>
</int:chain>
<bean id="resultTransformer" class="org.springframework.integration.xml.transformer.ResultToStringTransformer" />
<bean id="TransformerBean" class="test.TransformerImpl"></bean>
<bean id ="messageSender" class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
<property name="connectionTimeout" value="2000"></property>
</bean>
如上所述,我添加了带有int-ws:outbound-gateway的messageSender bean引用,并设置了属性connectiontimeout=2sec,但我仍然可以看到,对于网络关闭时的第一次命中,这需要等待19秒,对于下一次命中,则不到19秒,但至少不是第一次命中所需的超时。因此,我们没有任何选择,可以确定所需的超时总是有效的
谢谢,
Vinay首先,请阅读本章: 根据您的配置,您有
direct
流,因此没有理由有请求超时
和回复频道
您的40sec
问题在WS-gateway的WebServiceMessageSender
下。在您的情况下,默认情况下它是HttpUrlConnectionMessageSender
。在HttpURLConnection
中有一些connectTimeout
属性
我不确定如何更改它,但我更喜欢使用HttpComponentsMessageSender
来更好地控制HTTP连接
现在的问题是
为什么是40秒,而不是回复超时后的5秒?
。因为你的线程在send
上被阻塞,而且它还没有到达等待回复
部分。Hi Artem,当按照建议合并更改时,我仍然面临超时问题。我已经用我仍然面临的问题更新了我的查询区域。需要您的建议。我建议您调试以确定程序的哪个部分需要时间。顺便说一句,在发送方
-读取超时
上还有另一个选项。