消息传递引擎停止机制
可以使用多种不同的机制来停止消息传递引擎。您还可以指定两个不同的紧急程度:立即和强制。停止消息传递引擎会阻止它发送消息。
您可以通过下列方法停止消息传递引擎:
- 使用管理控制台停止消息传递引擎。
- 使用 JMX stop 命令
- 使用 stopServer 命令停止主管消息传递引擎的应用程序服务器
可通过两种方式停止消息传递引擎:“立即”和“强制”。
- 立即
- 在“立即”方式下,在发出停止请求时正在执行的所有消息传递操作都完成之后,消息传递引擎将停止。没有对应用程序发送通知以表明消息传递引擎正在停止。在发出 stop
命令之后,消息传递引擎不允许启动新的操作。
对于每个现有的连接,消息传递引擎等待当前操作完成,除非该操作是在消息传递引擎内造成阻塞的操作,如接收操作。在这种情况下,将中断该操作。即使异步使用者可能花费任意的时间来处理当前消息,也会允许他们完成处理。然后,消息传递引擎回退活动的事务并禁止对该连接执行进一步操作。当所有连接处于这种无效状态时,消息传递引擎将停止。
- 强制
- 在“强制”方式中,以抢先停止任何当前事务并强制断开应用程序的方式停止消息传递引擎。
“强制”方式与“立即”方式相似,只是在停止消息传递引擎时,会中断发出停止命令时应用程序线程上正在进行的消息传递操作。与允许完成现有消息传递操作不同,消息传递引擎将中断它们然后禁止进一步操作。当所有连接处于这种状态时,消息传递引擎将停止。
“强制”方式将尽快地关闭消息传递引擎。因为“强制”方式停止需要更多的恢复操作,所以消息传递引擎的后续重新启动所花时间可能比使用“立即”方式停止它后重新启动时间更长。例如,“强制”方式停止可能会使消息处于不确定事务状态,您必须处理这些消息,如解决不确定事务所述。
您可以将执行执行过长的立即停止升级为强制停止。
以下停止方式可能用于不同的停止机制:
停止机制 | 立即 | 强制 |
---|---|---|
管理控制台 | 是 | 是 |
JMX stop 命令 | 是 | 是 |
stopServer 命令 | 是 | 否 |
注: 如果消息传递引擎向 HA 管理器报告
isAlive=false,那么将停止整个应用程序服务器进程,并且不会完成当前事务或清理。此结果等同于强制停止。