消费如何通知JMS队列来保存消息

时间:2015-07-02 08:17:44

标签: java queue jms

我的情景是,我在听队列。如果发布了消息,我将使用它并将其转发到另一个应用程序。

当发现应用程序关闭时,我可以通过某种方式通知队列来保留消息,以便我不会收到消息。然后,当应用程序返回时,我将通知队列我可以再次处理该消息。

似乎" CLIENT_ACKNOWLEDGE"模式对这种情况没有帮助。

在这方面的帮助将不胜感激。提前致谢。

2 个答案:

答案 0 :(得分:0)

一般来说,您有两种可能性:

  1. 停止使用这些消息。在这种情况下,消息将保留在队列中,直到您继续处理。
  2. 生成另一个队列作为反向通道,并通过此队列发送停止/启动消息给消息的生产者。这也可以视为背压的实现。
  3. imho,1。在大多数情况下应该足够了。 2.如果生成的消息量导致您想要避免的大量资源(内存/磁盘)消耗,则将是必要的。你仍然可以使用两者的组合,例如如果应用程序停机超过一段时间,则通知生产者。

答案 1 :(得分:0)

我可以建议以下解决方案。请注意,#1,#2是"手册",#3是"真实"。选择取决于您的需求。

  1. 在使用消息之前检查应用程序可用性。这将有效,但有一个问题:如果应用程序在您正在使用消息时完全不可用该怎么办?
  2. 使用消息,尝试将其发送到您的应用。如果尝试失败,请将消息推回到同一队列。但请注意此解决方案:如果您将消息推送到队列,则立即再次使用它,尝试将其发送到可能仍然不可用的应用程序,再将其推送到队列等。
  3. 真正的解决方案是使用交易。这正是您所需要的。如果app不可用,请抛出异常。这将自动启动重试机制。