Java 使用者如何通知JMS队列保存消息

Java 使用者如何通知JMS队列保存消息,java,queue,jms,Java,Queue,Jms,我的情况是,我听一个队列。如果发布了一条消息,我将使用它并将其转发到另一个应用程序 是否可能在查找应用程序时 关闭时,我可以以某种方式通知队列保留消息,以便我无法获取消息。然后当应用程序返回时,我会通知队列我可以再次处理该消息 “客户确认”模式似乎对这种情况没有帮助 在此方面的帮助将不胜感激。提前谢谢 通常,您有两种可能: 停止使用这些信息。在这种情况下,消息将保留在队列中,直到您恢复处理 生成另一个队列作为反向通道,并通过此队列将停止/启动消息发送给消息的生产者。这也可以看作是背压的一种实现

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

是否可能在查找应用程序时 关闭时,我可以以某种方式通知队列保留消息,以便我无法获取消息。然后当应用程序返回时,我会通知队列我可以再次处理该消息

“客户确认”模式似乎对这种情况没有帮助


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

通常,您有两种可能:

  • 停止使用这些信息。在这种情况下,消息将保留在队列中,直到您恢复处理
  • 生成另一个队列作为反向通道,并通过此队列将停止/启动消息发送给消息的生产者。这也可以看作是背压的一种实现

  • 伊姆霍,1。在大多数情况下应足够。2.如果生成的消息量会导致您希望避免的大量资源(内存/磁盘)消耗,则这是必需的。您仍然可以使用这两种方法的组合,例如,如果应用程序关闭超过一段时间,您会通知制作人。

    通常,您有两种可能:

  • 停止使用这些信息。在这种情况下,消息将保留在队列中,直到您恢复处理
  • 生成另一个队列作为反向通道,并通过此队列将停止/启动消息发送给消息的生产者。这也可以看作是背压的一种实现

  • 伊姆霍,1。在大多数情况下应足够。2.如果生成的消息量会导致您希望避免的大量资源(内存/磁盘)消耗,则这是必需的。您仍然可以使用这两种方法的组合,例如,如果应用程序关闭超过一段时间,您可以通知制作人。

    我可以建议以下解决方案。请注意#1、#2是“手动”,#3是“真实”。选择取决于你的需要

  • 在使用消息之前,请检查应用程序可用性。这将起作用,但有一个问题:如果应用程序在您使用该消息的同时变得不可用,该怎么办
  • 使用消息,尝试将其发送到您的应用程序。如果尝试失败,请将消息推回到同一队列。不过,使用此解决方案时要小心:如果您将消息推送到队列,您会立即再次使用它,尝试将其发送到可能仍然不可用的应用程序,然后再次将其推送到队列,等等
  • 真正的解决方案是使用事务。这正是你需要的。如果应用程序不可用,则引发异常。这将自动启动重试机制
    我可以提出以下解决方案。请注意#1、#2是“手动”,#3是“真实”。选择取决于你的需要

  • 在使用消息之前,请检查应用程序可用性。这将起作用,但有一个问题:如果应用程序在您使用该消息的同时变得不可用,该怎么办
  • 使用消息,尝试将其发送到您的应用程序。如果尝试失败,请将消息推回到同一队列。不过,使用此解决方案时要小心:如果您将消息推送到队列,您会立即再次使用它,尝试将其发送到可能仍然不可用的应用程序,然后再次将其推送到队列,等等
  • 真正的解决方案是使用事务。这正是你需要的。如果应用程序不可用,则引发异常。这将自动启动重试机制
    当应用程序关闭时关闭JMS连接,然后在应用程序启动后重新建立连接,怎么样?确保将队列中消息的超时设置为“0”,以便它们是持久的。您可以查看下面的内容来了解JMS persistence@kalyan,谢谢您的回答。它应该适合我的情况。当你的应用程序关闭时关闭JMS连接,然后在你的应用程序启动后重新建立连接怎么样?确保将队列中消息的超时设置为“0”,以便它们是持久的。您可以查看下面的内容来了解JMS persistence@kalyan,谢谢您的回答。这应该适合我的情况。谢谢你的回答。但就我的情况而言,停止监听队列是最简单的实现方法。:)谢谢你的回答。但就我的情况而言,停止监听队列是最简单的实现方法。:)