对于你的问题,需要先了解MQ触发机制的工作原理。
MQ触发机制是:当一个消息被放到设置为触发的应用队列中时,根据应用队列设置的触发类型及相应的触发事件,队列管理器将产生一条触发消息放入initiation队列中。触发监控器(monitor)从initiation队列读取触发消息并基于消息内容采取相应的动作。
runmqtrm.exe是MQ内嵌的触发监控器。
对于FIRST触发类型,队列管理器产生触发消息的触发事件是触发队列的深度从0改变为1。
对于描述中提到的关于”通讯程序出错和使用新密码编译后,程序也不被调用“问题,是由于不满足触发事件(触发队列的深度从0改变为1),队列管理器没有产生触发消息,所以触发监控器不会有启动通讯程序的动作。
对于描述中提到的“关闭runmqtrm.exe,手动启动runmqtrm.exe后马上调用通讯程序“问题,是当队列管理器发现没有触发监控器运行,而且触发队列的深度又不为0时,将产生一条触发消息放入initiation队列中。当重新启动runmqtrm.exe后,就会马上调用通讯程序,所以不存在runmqtrm.exe假死的问题。
MQ提供了队列管理器的属性TRIGINT,可以指定一个时间间隔,为设置为FIRST类型的触发队列所使用