从异常情况恢复消息传递引擎
在服务集成中,可能存在以下多种异常情况:不需要重新启动消息传递引擎,需要自动重新启动消息传递引擎,由显式运行状况监视检测并由 HAManager 处理,或需要用户干预。
通过运行消息传递引擎进行恢复
消息传递引擎可以处理某些异常情况,而不需要重新启动或故障转移消息传递引擎。该异常情况会自动更正,且会将一个条目添加到系统错误日志中,以解释异常以及建议一些用户操作。消息传递引擎继续运行,并使用为正在处理的消息指定的服务质量。通过自动重新启动消息传递引擎(本地异常)进行恢复
消息传递引擎可通过自动重新启动消息传递引擎,在当前服务器或备用服务器上从本地异常中恢复。例如,如果消息传递引擎不能连接至它的数据存储器,那么消息传递引擎在其中运行的服务器可能无法创建到数据存储器的连接,但同一集群中另一个服务器可以创建。在高可用性配置中,即,故障转移已启用,HAManager 将停止并禁用当前服务器中的消息传递引擎,并将消息传递引擎故障转移至新的服务器。30 秒后,已禁用的消息传递引擎将自动启用。
从显式运行状况监视检测到的异常恢复
消息传递引擎无法检测诸如线程循环(当线程陷入循环且不再执行有用工作时)或死锁(当两个线程互相阻塞)的异常,但显式运行状况监视可以检测。 HAManager 提供此类监视,并定期测试消息传递引擎的运行状况。如果 HAManager 检测到使用数据存储器的消息传递引擎无法正常运行,那么 HAManager 会停止并禁用消息传递引擎。如果消息传递引擎使用文件存储器,那么 HAManager 会关闭主管该消息传递引擎的服务器。如果服务器位于集群中,且消息传递引擎的策略允许进行故障转移,那么 HAManager 会在备用服务器上重新启动消息传递引擎。如果消息传递引擎使用数据存储器,那么 30 秒后,已禁用的消息传递引擎将自动启用。
需要用户干预(全局异常)的恢复
消息传递引擎无法通过重新启动消息传递引擎或对其进行故障转移从全局异常恢复。例如,如果消息传递引擎的数据存储器损坏,那么通过在另一个服务器上运行消息传递引擎不能解决问题,因为它遇到相同的问题。如果在这种情况下消息传递引擎进行了故障转移,那么该消息传递引擎将持续进行故障转移,因为它无法在任何服务器中运行。系统会关闭已尝试运行消息传递引擎的服务器,因此这会对集群产生非预期损坏。为避免这种情况,如果发生全局异常,消息传递引擎应记录错误,停止处理消息且不要进行故障转移。只有在更正全局异常情况并重新启动服务器后,才能重新启动消息传递引擎。