0

假设我有几个订阅者从一个主题消费。在将消息传递给所有订阅者后,我想触发一个在输入中使用此消息的作业。

因此,最简单的方法是将已成功传递给所有订阅者的消息移动到一个队列中,我的工作将从该队列中使用消息。它是 JMS 的一部分吗?

是否有任何消息代理能够直接做到这一点?

如果没有,是否有解决此问题的简单解决方案?

4

2 回答 2

1

您应该能够使用 activemq 的建议来做到这一点。

有关咨询消息的更多信息,请参见此处:http: //activemq.apache.org/advisory-message.html

因此,对于相关主题,您想要做的是跟踪:

  • 消费者数量
  • 当向他们发送消息时
  • 当消息被每个消费者确认时

要获取消费者数量,请收听“ActiveMQ.Advisory.Consumer.Topic”。咨询主题

要获取消息发送的时间,请收听“ActiveMQ.Advisory.MessageDelivered.Topic”。

要获得确认消息的时间,请收听“ActiveMQ.Advisory.MessageConsumed.Topic”。

您可以轻松地使用 Apache Camel 来帮助解决这个问题(收听主题)并汇总是否所有消费者都已处理(确认)该消息..然后可以开始您的进一步处理..

于 2013-10-30T17:34:39.217 回答
0

您可以创建另一个持久订阅,将消息从主题直接路由到队列。从该队列中,您的作业可以使用消息。这比创建触发器将消息路由到队列要容易得多。

因此,最简单的方法是将已成功传递给所有订阅者的消息移动到一个队列中,我的工作将从该队列中使用消息。它是 JMS 的一部分吗?

不,这不是 JMS 规范的一部分。

于 2013-10-30T14:15:30.650 回答