【发布时间】:2013-11-09 20:05:02
【问题描述】:
假设我有几个订阅者从一个主题消费。在将消息传递给所有订阅者后,我想触发一个在输入中使用此消息的作业。
因此,最简单的方法是将已成功传递给所有订阅者的消息移动到我的工作将从中使用消息的队列中。 它是 JMS 的一部分吗?
有没有消息代理可以直接做到这一点?
如果没有,是否有解决此问题的简单方法?
【问题讨论】:
标签: jms activemq message-queue jms-topic
假设我有几个订阅者从一个主题消费。在将消息传递给所有订阅者后,我想触发一个在输入中使用此消息的作业。
因此,最简单的方法是将已成功传递给所有订阅者的消息移动到我的工作将从中使用消息的队列中。 它是 JMS 的一部分吗?
有没有消息代理可以直接做到这一点?
如果没有,是否有解决此问题的简单方法?
【问题讨论】:
标签: jms activemq message-queue jms-topic
您可以创建另一个持久订阅,将消息从主题直接路由到队列。从该队列中,您的作业可以使用消息。这比创建触发器将消息路由到队列要容易得多。
因此,最简单的方法是移动已发送的消息 成功地将所有订阅者传递到一个队列中,我的 作业会消耗消息。它是 JMS 的一部分吗?
不,这不是 JMS 规范的一部分。
【讨论】:
您应该能够使用 activemq 的建议来做到这一点。
有关咨询消息的更多信息,请参见此处:http://activemq.apache.org/advisory-message.html
因此,对于相关主题,您想要做的是跟踪:
要获取消费者数量,请收听“ActiveMQ.Advisory.Consumer.Topic”。咨询主题
要获取消息发送的时间,请收听“ActiveMQ.Advisory.MessageDelivered.Topic”。
要获取消息何时被确认,请收听“ActiveMQ.Advisory.MessageConsumed.Topic”。
您可以轻松地使用 Apache Camel 来帮助解决这个问题(收听主题)并汇总是否所有消费者都已处理(确认)该消息..然后可以开始您的进一步处理..
【讨论】: