Spring integration soap请求和应答的spring集成网关中的超时问题

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

在设置从我的接口(使用spring集成)到ESB接口的soap请求的超时时,我面临一些难题。在向ESB接口发送请求时,我将请求超时设置为5000ms,回复超时设置为5000ms,但如果ESB接口上的服务关闭,请求在期望的5000ms(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秒,但至少不是第一次命中所需的超时。因此,我们没有任何选择,可以确定所需的超时总是有效的

谢谢,
Vinay

首先,请阅读本章:

根据您的配置,您有
direct
流,因此没有理由有
请求超时
回复频道

您的
40sec
问题在WS-gateway的
WebServiceMessageSender
下。在您的情况下,默认情况下它是
HttpUrlConnectionMessageSender
。在
HttpURLConnection
中有一些
connectTimeout
属性

我不确定如何更改它,但我更喜欢使用
HttpComponentsMessageSender
来更好地控制HTTP连接


现在的问题是
为什么是40秒,而不是回复超时后的5秒?
。因为你的线程在
send
上被阻塞,而且它还没有到达
等待回复
部分。

Hi Artem,当按照建议合并更改时,我仍然面临超时问题。我已经用我仍然面临的问题更新了我的查询区域。需要您的建议。我建议您调试以确定程序的哪个部分需要时间。顺便说一句,在
发送方
-
读取超时
上还有另一个选项。