【发布时间】:2014-10-26 07:14:49
【问题描述】:
在从我的界面(使用 spring 集成)设置到 ESB 接口的肥皂请求超时时,我面临一些挑战。在将请求发送到 ESB 接口时,我设置了请求超时 = 5000 毫秒和回复超时 = 5000 毫秒,但如果 ESB 接口上的服务关闭,则请求在所需的 5000 毫秒(5 秒)超时时间和超时时间内不会超时有时在 40 秒或更长时间内。我尝试将默认请求超时和默认回复超时选项也与 int:gateway 配置一起使用,但同样的问题。请看下面的配置完成:
<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 秒,但至少不是第一次命中所需的超时。那么我们是否没有任何选择可以确定所需的超时始终有效。
谢谢, 维奈
【问题讨论】: