2014-03-06 75 views
0

我们有一个标记为已触发的应用程序MQ队列和一个已设置的MQTT_FIRST。MQ队列MQTT_FIRST触发器创建多个触发消息

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

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

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

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

所以我的问题是:有没有办法阻止MQ管理器发送多个MQTT_FIRST触发消息到启动队列,并使它只发送一次,当一个消息到达一个空队列,就是这样。如果我们真的想要再次发送消息触发器,我们可以使用Trigger Interval来实现,但是对于我们要实现的目标,不管发生什么,启动队列中都不应该有一个以上的触发消息。

提前感谢 朱利安

回答

0

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

是否有办法防止MQ经理多MQTT_FIRST 触发消息发送到启动队列,使其只有当消息在空队列时,这是它发送一次 。

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

+0

我不是在抱怨。我正在寻找现有规则背景下的解决方案。 当你在大批量中收到数千条消息时,由于各种原因一次性处理它们是不切实际的:暂停,交易太大等 – Julian

+0

您可能需要重新考虑设计。首先触发在这种情况下看起来不是正确的解决方案。如果交易规模是一个问题,您可以尝试深入触发。 – Umapathy

+0

最简单的解决方案是大大减少批处理窗口。即不是每6小时一次,而是每小时或每20分钟运行一次。 – Roger