此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
有序关机
如“MBean Exporter”中所述,MBean 导出器提供了一个名为stopActiveComponents
,用于有序停止应用程序。
该作具有单个Long
参数。
该参数指示作等待允许正在进行的消息完成的时间(以毫秒为单位)。
该作的工作原理如下:
-
叫
beforeShutdown()
在实现的所有 bean 上OrderlyShutdownCapable
.这样做可以让此类组件为关闭做好准备。 实现此接口的组件及其对此调用执行的作的示例包括停止其侦听器容器的 JMS 和 AMQP 消息驱动适配器、停止接受新连接(同时保持现有连接打开)的 TCP 服务器连接工厂、删除(记录)收到的任何新消息的 TCP 入站端点以及返回
503 - Service Unavailable
对于任何新请求。 -
停止任何活动通道,例如 JMS 或 AMQP 支持的通道。
-
全部停止
MessageSource
实例。 -
停止所有入站
MessageProducer
s(不是OrderlyShutdownCapable
). -
等待剩余时间,由
Long
参数传递给作。这样做可以让任何正在进行的消息完成它们的旅程。 因此,在调用此作时选择适当的超时非常重要。
-
叫
afterShutdown()
在所有OrderlyShutdownCapable
组件。这样做可以让此类组件执行最终关闭任务(例如,关闭所有打开的套接字)。
如 Orderly Shutdown Managed Operation 中所述,可以使用 JMX 调用此作。
如果您希望以编程方式调用该方法,则需要注入或以其他方式获取对IntegrationMBeanExporter
.
如果没有id
属性在<int-jmx:mbean-export/>
定义,bean 有一个生成的名称。
此名称包含一个随机组件,以避免ObjectName
如果同一个JVM中存在多个Spring Integration上下文(MBeanServer
).
因此,如果您希望以编程方式调用该方法,我们建议您向导出器提供id
属性,以便您可以在应用程序上下文中轻松访问它。
最后,可以使用<control-bus>
元素。
有关详细信息,请参阅监控 Spring Integration 示例应用程序。
前面描述的算法在 4.1 版本中得到了改进。
以前,所有任务执行器和调度程序都已停止。
这可能会导致流中消息QueueChannel 实例保留。
现在,关闭使轮询器运行,让这些消息被清空和处理。 |