Orderly Shutdown
如 "MBean Exporter" 中所述,MBean 导出器提供一个名为 `stopActiveComponents`的 JMX 操作,用于以有序方式停止应用程序。该操作有一个 `Long`参数。该参数表示该操作等待以完成正在传输消息所需的时间(以毫秒为单位)。操作方法如下:
-
对所有实现
OrderlyShutdownCapable`的 Bean 调用 `beforeShutdown()
。这样做可以使此类组件为关闭做准备。实现此接口的组件及其使用此调用的功能的示例包括:停止其侦听器容器的 JMS 和 AMQP 消息驱动的适配器、停止接受新连接(同时保持现有连接打开)的 TCP 服务器连接工厂、放弃(记录)任何接收到的新消息的 TCP 入站端点以及为任何新请求返回 “503 - 服务不可用
” 的 HTTP 入站端点。 -
停止所有活动通道,例如由 JMS 或 AMQP 支持的通道。
-
Stop all
MessageSource
instances. -
停止所有入站
MessageProducer
(不是OrderlyShutdownCapable
)。 -
根据传入操作的
Long
参数值定义,等待剩余时间。这样做可以使任何正在进行的消息完成其进程。因此,在调用此操作时选择一个合适的超时非常重要。 -
在所有
OrderlyShutdownCapable
组件上调用afterShutdown()
。这样做可以使此类组件执行最终关闭任务(例如,关闭所有打开的套接字)。
如 Orderly Shutdown Managed Operation中所述,该操作可以通过使用 JMX 来调用。如果您希望以编程方式调用方法,您需要注入 IntegrationMBeanExporter`或其他获得它的引用。如果未在 `<int-jmx:mbean-export/>`定义中提供 `id`特性,则该 bean 有一个生成名称。该名称中包含一个随机组件,以避免如果同一个 JVM 中有多个 Spring Integration 上下文 (`MBeanServer
),出现 `ObjectName`冲突。
因此,如果你希望通过编程方式调用该方法,我们建议你向该 Exporter 提供一个 “id
” 属性,以便你可以在应用程序上下文中轻松访问它。
最后,可以使用 <control-bus>
元素调用该操作。有关详细信息,请参阅 monitoring Spring Integration sample application。
先前改进的算法在 4.1 版本得到优化,以前所有任务执行程序和计划程序都会停止,这可能导致 |