2013-10-30 54 views
0

假设我有几个订阅者正在消费某个主题。在消息传递给所有订户后,我想要触发一个将在输入中使用此消息的作业。将消耗的消息从主题移动到队列

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

有没有任何消息中间人能够直接做到这一点?

如果不是有一个简单的解决方案来解决这个问题?

回答

1

你应该可以使用activemq的建议来做到这一点。

在这里看到更多有关咨询的消息:http://activemq.apache.org/advisory-message.html

所以,你想要做什么,有问题的话题,是跟踪:

  • 消费者的数量
  • 当消息分派给他们
  • 当消息已被每个消费者确认时

以获得消费者的数量,听取“ActiveMQ.Advisory.Consumer.Topic”。咨询主题

获取消息发送时,听取“ActiveMQ.Advisory.MessageDelivered.Topic”。

得到一个消息已经ack'd,听取“ActiveMQ.Advisory.MessageConsumed.Topic”。

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

0

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

所以最简单的方式做这将是移动已成功地 传递给所有的sucscribers从中我 工作会消耗消息队列中的消息。它是否是JMS的一部分?

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

+0

为了澄清,我需要在所有订户成功消费(和处理)消息之后运行作业。 在这种情况下,我假设用户只有在处理完消息后才会确认消息。 我正在谈论的工作可能是例如记录类似“每个人都在使用的消息[messID]”的进程 – R3DL

+0

有一些问题需要在这里回答。用户数量是否固定?如果是,那么你可以使用其中一个队列来协调你所有的订阅。当最后一位用户处理邮件时,您的工作可以继续按照我在上面的答案中提到的方式处理邮件。如果用户数量不固定,则协调可能无法进行。 – Shashi