为MQ应用程序创建重新连接逻辑非常简单。我喜欢有一个控制器类和一个工人类来处理重新连接逻辑。去看看Universal File Mover(UFM),
http://www.capitalware.biz/ufm_overview.html
特别是MQReceive Action。是的,UFM是用Java编写的,但Java / MQ代码和C#/ MQ代码之间也没有区别。 UFM是一个开源项目,源代码可供下载。
特别是,请查看MQReceiveAction.java和MQGetMsg.java类。 MQReceiveAction.java是控制器类,MQGetMsg.java是工作类。 MQReceiveAction通过MQGetMsg类连接到队列管理器。发生MQException时,MQReceiveAction将通过MQGetMsg与队列管理器断开连接并休眠1分钟,然后尝试重新连接到队列管理器。
但这会不断失去相关ID的价值。
那么,你把它保存在一个没有被丢弃/清理的课程中吗?在我的示例中,如果我需要临时保存CorrelID,我只需让MQReceiveAction从worker类中检索它,并且当MQReceiveAction成功重新连接时,将CorrelID推送到新的worker类中。
最好从10,000英尺处查看问题并将其分开的组件分开。