繁体   English   中英

如何在JMS中接收确认

[英]How to receive acknowledgement in JMS

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

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

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

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

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

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

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

如果您的程序只包含一个消息生成器,则可以在消息使用者中创建一个Queue,并让生产者订阅该Queue。 在队列模式下,它是点对点的。 因此,消息将仅从消费者传递给生产者。

或者,您也可以使用setJMSReplyTo方法指定消费者在接收来自生产者的消息时要回复的队列。 这样您就不需要在使用者中显式创建队列,但您也可以在生成器中创建队列。 但是你仍然需要让制作人听到该队列收到确认。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM