MQ队列MQTT_FIRST触发器创建多个触发器消息

时间:2014-03-06 05:15:49

标签: java spring jms ibm-mq mq

我们将Application MQ Queue标记为已触发,并在其上设置了MQTT_FIRST。

当消息第一次到达该队列时,队列管理器会创建一个触发器消息并将其写入我们为此目的定义的启动队列中。 触发器消息将触发监视进程的执行,该进程将启动一个触发器监视器应用程序,该应用程序将逐个读取应用程序队列中的消息。

我们使用Spring JmsTemplate从应用程序队列中逐个读取消息。该jmsTemplate实例打开与应用程序队列的连接,从那里读取消息,然后关闭连接。

我们遇到的问题是,当连接关闭时,如果应用程序队列中有多个消息,则会向启动队列发送新的触发器消息,这将导致另一个触发器监视器应用程序(在不同的主机上运行)弹出。这不是我们想要的,因为消息序列非常重要,因此只有一个消息消费者同时处于活动状态是至关重要的。

我们有多个触发器监控应用程序(或消费者)的原因是出于HA原因。

所以我的问题是:是否有办法阻止MQ管理器向启动队列发送多个MQTT_FIRST触发器消息,并使其仅在消息到达空队列时发送一次,就是这样。如果我们真的想要再次发送消息触发器,我们可以使用触发器间隔,但是对于我们试图实现的目标,无论如何,启动队列中应该只有一个触发器消息。

提前感谢 朱利安

1 个答案:

答案 0 :(得分:0)

  

我们遇到的问题是,如果有连接,则关闭连接   应用程序队列中的多个消息将出现新的触发器消息   被发送到启动队列,这将导致另一个   触发器 - 监视器应用程序(在不同的主机上运行)弹出。

  

有没有办法阻止MQ管理器发送多个MQTT_FIRST   触发消息到启动队列,并使其只发送一次   当一条消息到达一个空队列时就是这样。

是的,请勿关闭连接。使用Trigger First时需要阅读规则。其中一条规则是在关闭连接之前使用所有消息。如果你不遵守规则那么你就不能抱怨。