此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

在 HTTP 组件的上下文中,必须考虑两个计时方面:Spring中文文档

这些组件与消息通道交互,可以为其指定超时。 例如,HTTP 入站网关将从连接的 HTTP 客户端接收的消息转发到消息通道(使用请求超时),因此 HTTP 入站网关从用于生成 HTTP 响应的回复通道(使用回复超时)接收回复消息。 下图提供了直观的解释:Spring中文文档

HTTP 入站网关
图 1.超时设置如何应用于 HTTP 入站网关

对于出站终结点,我们需要考虑在与远程服务器交互时计时的工作方式。 下图显示了此方案:Spring中文文档

HTTP 出站网关
图2.超时设置如何应用于 HTTP 出站网关

在使用 HTTP 出站网关或 HTTP 出站通道适配器发出活动 HTTP 请求时,您可能需要配置与 HTTP 相关的超时行为。 在这些情况下,这两个组件使用 Spring 的 RestTemplate 支持来执行 HTTP 请求。Spring中文文档

要为 HTTP 出站网关和 HTTP 出站通道适配器配置超时,可以直接引用 Bean(使用属性),也可以提供对 ClientHttpRequestFactory bean 的引用(使用属性)。 Spring 提供了以下接口实现:RestTemplaterest-templaterequest-factoryClientHttpRequestFactorySpring中文文档

如果未显式配置 or 属性,则会实例化默认值(使用 )。request-factoryrest-templateRestTemplateSimpleClientHttpRequestFactorySpring中文文档

对于某些 JVM 实现,类对超时的处理可能不一致。URLConnectionSpring中文文档

例如,从 Java™ 平台标准版 6 API 规范中:setConnectTimeoutSpring中文文档

此方法的某些非标准实现可能会忽略指定的超时。 要查看集合,请调用 getConnectTimeout()。connect timeout

如果您有特定需求,则应测试超时。 考虑使用 ,而 又使用 Apache HttpComponents HttpClient,而不是依赖于 JVM 提供的实现。HttpComponentsClientHttpRequestFactorySpring中文文档

将 Apache HttpComponents HttpClient 与池连接管理器一起使用时,应注意,默认情况下,连接管理器为每个给定路由创建的并发连接不超过两个,总共不超过 20 个连接。 对于许多实际应用来说,这些限制可能被证明过于严格。 有关配置此重要组件的信息,请参阅 Apache 文档

以下示例使用分别配置了 5 秒的连接和读取超时来配置 HTTP 出站网关:SimpleClientHttpRequestFactorySpring中文文档

<int-http:outbound-gateway url="https://samples.openweathermap.org/data/2.5/weather?q={city}"
                           http-method="GET"
                           expected-response-type="java.lang.String"
                           request-factory="requestFactory"
                           request-channel="requestChannel"
                           reply-channel="replyChannel">
    <int-http:uri-variable name="city" expression="payload"/>
</int-http:outbound-gateway>

<bean id="requestFactory"
      class="org.springframework.http.client.SimpleClientHttpRequestFactory">
    <property name="connectTimeout" value="5000"/>
    <property name="readTimeout"    value="5000"/>
</bean>

HTTP 出站网关Spring中文文档

对于 HTTP 出站网关,XML 架构仅定义 reply-timeoutreply-timeout 映射到 org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler 类的 sendTimeout 属性。 更准确地说,该属性设置在扩展类上,而扩展类最终将属性设置在 .AbstractReplyProducingMessageHandlerMessagingTemplateSpring中文文档

sendTimeout 属性的值默认为秒,并将应用于连接的 . 这意味着,根据实现的不同,消息通道的发送方法可能会无限期地阻塞。 此外,仅当实际的 MessageChannel 实现具有阻塞发送(如“full”有界 QueueChannel)时,才使用 sendTimeout 属性。30MessageChannelSpring中文文档

对于某些 JVM 实现,类对超时的处理可能不一致。URLConnectionSpring中文文档

例如,从 Java™ 平台标准版 6 API 规范中:setConnectTimeoutSpring中文文档

此方法的某些非标准实现可能会忽略指定的超时。 要查看集合,请调用 getConnectTimeout()。connect timeout

如果您有特定需求,则应测试超时。 考虑使用 ,而 又使用 Apache HttpComponents HttpClient,而不是依赖于 JVM 提供的实现。HttpComponentsClientHttpRequestFactorySpring中文文档

将 Apache HttpComponents HttpClient 与池连接管理器一起使用时,应注意,默认情况下,连接管理器为每个给定路由创建的并发连接不超过两个,总共不超过 20 个连接。 对于许多实际应用来说,这些限制可能被证明过于严格。 有关配置此重要组件的信息,请参阅 Apache 文档

HTTP 入站网关

对于 HTTP 入站网关,XML 架构定义属性,该属性用于设置类(在扩展类上)的属性。 还可以使用该特性映射到同一类上的属性。request-timeoutrequestTimeoutHttpRequestHandlingMessagingGatewayMessagingGatewaySupportreply-timeoutreplyTimeoutSpring中文文档

两个超时属性的默认值均为(一千毫秒或一秒)。 最终,该属性用于在实例上设置。 另一方面,该属性用于在实例上设置属性。1000msrequest-timeoutsendTimeoutMessagingTemplatereplyTimeoutreceiveTimeoutMessagingTemplateSpring中文文档

若要模拟连接超时,可以连接到不可路由 IP 地址,例如 10.255.255.10。
若要模拟连接超时,可以连接到不可路由 IP 地址,例如 10.255.255.10。