此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.4.3spring-doc.cadn.net.cn

有序关机

如“MBean 导出器”中所述,MBean 导出器提供了一个名为stopActiveComponents,用于有序停止应用程序。 该作具有单个Long参数。 该参数指示作等待多长时间(以毫秒为单位)以允许正在进行的消息完成。 该作的工作原理如下:spring-doc.cadn.net.cn

  1. beforeShutdown()在所有实现OrderlyShutdownCapable.spring-doc.cadn.net.cn

    这样做可以让此类组件为关闭做好准备。 实现此接口的组件示例以及它们对此调用执行的作包括 JMS 和 AMQP 消息驱动的适配器(用于停止其侦听器容器)、停止接受新连接(同时保持现有连接打开)的 TCP 服务器连接工厂、丢弃(记录)收到的任何新消息的 TCP 入站端点以及返回503 - Service Unavailable对于任何新请求。spring-doc.cadn.net.cn

  2. 停止任何活动通道,例如 JMS 或 AMQP 支持的通道。spring-doc.cadn.net.cn

  3. 全部停止MessageSource实例。spring-doc.cadn.net.cn

  4. 停止所有入站MessageProducers(不是OrderlyShutdownCapable).spring-doc.cadn.net.cn

  5. 等待剩余的任何剩余时间,如Long参数。spring-doc.cadn.net.cn

    这样做可以让任何正在进行的消息完成其旅程。 因此,在调用此作时,选择适当的超时非常重要。spring-doc.cadn.net.cn

  6. afterShutdown()在所有OrderlyShutdownCapable组件。spring-doc.cadn.net.cn

    这样做可以让这些组件执行最终的关闭任务(例如,关闭所有打开的套接字)。spring-doc.cadn.net.cn

Orderly Shutdown Managed Operation 中所述,可以使用 JMX 调用此作。 如果您希望以编程方式调用该方法,则需要注入或以其他方式获取对IntegrationMBeanExporter. 如果没有id属性在<int-jmx:mbean-export/>definition,则 bean 具有生成的名称。 此名称包含要避免的随机组件ObjectName如果同一 JVM 中存在多个 Spring 集成上下文(MBeanServer).spring-doc.cadn.net.cn

因此,如果您希望以编程方式调用该方法,我们建议您为导出器提供id属性,以便您可以在应用程序上下文中轻松访问它。spring-doc.cadn.net.cn

最后,可以使用<control-bus>元素。 有关详细信息,请参阅监视 Spring 集成示例应用程序spring-doc.cadn.net.cn

前面描述的算法在版本 4.1 中得到了改进。 以前,所有任务执行程序和计划程序都已停止。 这可能会导致QueueChannel要保留的实例。 现在关闭使 poller 保持运行状态,以便排空和处理这些消息。