【问题标题】:How to receive acknowledgement in JMS如何在 JMS 中接收确认
【发布时间】:2013-01-22 06:17:55
【问题描述】:

这是我的场景。该程序是使用发布者/订阅者方法开发的。在生产者和消费者部分有两个主题(topic1,topic2)。我需要在生产者程序中从消费者那里获得对接收到的 topic1 的确认,以便当确认状态为真时,生产者程序必须在 topic2 上发送消息。

在消费者中搜索到建议 session.CLIENT_ACKNOWLEDGE 的链接。但是我需要将确认状态返回给生产者以进行进一步处理。

【问题讨论】:

    标签: java jms publish-subscribe


    【解决方案1】:

    JMS 规范没有为发布者定义任何 API 来了解订阅者是否使用了消息。发布者只是发布一条消息,它是消息提供者/代理将该消息传递给订阅者。如果有订阅,代理将传递消息,否则该消息将被丢弃。

    session.CLIENT_ACKNOWLEDGE 选项是消费者告诉消息传递提供者(而非生产者)从其队列/内存中删除消息的方式之一。还有其他几个确认选项,但所有这些选项都用于告诉消息传递提供者删除消息,但告诉生产者。

    如果生产者需要消费者的确认,那么消费者将不得不在另一个主题上发布确认消息,并且生产者订阅该主题以接收这些确认。例如:

    制片人发布在TOPIC1
    生产者订阅TOPIC1/ACKS
    消费者订阅TOPIC1
    收到消息后
    消费者向TOPIC1/ACKS发布确认消息
    生产者将收到确认消息。
    然后它可以在 TOPIC2 上发布

    您必须注意,可以有多个确认消息,因为 TOPIC1 上可能有多个订阅者。

    【讨论】:

    • 你能指导我举个例子吗?
    【解决方案2】:

    如果你的程序只包含一个消息生产者,你可以在消息消费者中创建一个队列,让生产者订阅该队列。在队列模式下,它是点对点的。所以消息只会从消费者传递给生产者。

    或者,您也可以使用setJMSReplyTo 方法指定您希望消费者在收到生产者的消息时回复的队列。这样,您无需在消费者中显式创建队列,但您也可以在生产者中创建队列。但是您仍然需要让生产者收听该队列以接收确认。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-08
      • 2012-07-25
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 2011-03-12
      相关资源
      最近更新 更多