【问题标题】:Moving consumed message from a topic to a queue将使用的消息从主题移动到队列
【发布时间】:2013-11-09 20:05:02
【问题描述】:

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

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

有没有消息代理可以直接做到这一点?

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

【问题讨论】:

    标签: jms activemq message-queue jms-topic


    【解决方案1】:

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

    因此,最简单的方法是移动已发送的消息 成功地将所有订阅者传递到一个队列中,我的 作业会消耗消息。它是 JMS 的一部分吗?

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

    【讨论】:

    • 澄清一下,我需要在所有订阅者成功消费(并处理)消息后运行该作业。在那种情况下,我假设订阅者仅在处理完消息后才确认消息。例如,我正在谈论的工作可能是一个记录诸如“消息 [messID] 已被所有人消费”之类的进程
    • 这里有一些问题需要解答。订阅人数是固定的吗?如果是,那么您可以使用其中一个队列在所有订阅之间进行协调。当最后一个订阅者处理消息时,您的工作可以继续使用我在上面的答案中提到的方式处理消息。如果订阅者数量不固定,则可能无法进行协调。
    【解决方案2】:

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

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

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

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

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

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

    要获取消息何时被确认,请收听“ActiveMQ.Advisory.MessageConsumed.Topic”。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      相关资源
      最近更新 更多