【问题标题】:Using ActiveMQ, it is possible to force the broker to resend advisory messages?使用 ActiveMQ,是否可以强制代理重新发送咨询消息?
【发布时间】:2016-09-21 04:04:29
【问题描述】:

我正在计划一项“消费者感知”服务,该服务仅在该主题至少有一个消费者时才会处理某种类型的信息。使用 spring,我能够创建以下代码来监控消费者何时连接或断开主题:

@JmsListener(destination = "ActiveMQ.Advisory.Consumer.>")
public void processaConsumidorConectado(Message message){
    System.out.println("Registrou um consumidor");
}

如果事件发生在我注册该主题之后,那效果会很好。但是,在我注册此侦听器之前,我可能已经在某个主题中拥有了消费者。

有没有办法强制activeMQ发送一个主题的所有咨询消息或类似的东西?

【问题讨论】:

    标签: spring jms activemq spring-messaging


    【解决方案1】:

    我认为追溯消费者是可能的,但我没有对此进行测试,也没有通过骆驼路线将消息复制到另一个主题。 我不知道这是否适合您,但您可以订阅

    ActiveMQ.Advisory.NoConsumer.Topic.YourTopic
    

    如果您收到有关此主题的消息,这意味着没有消费者连接

    http://activemq.apache.org/retroactive-consumer.html

    【讨论】:

    • 您可以向您的主题发送一条测试消息,然后在此之前收听“ActiveMQ.Advisory.NoConsumer.Topic.YourTopic”,如果消息是非持久性的并且如果没有连接的消费者,您将收到您的消息@NoConsumers 话题
    【解决方案2】:
    1. 通过咨询跟踪活跃订阅者将是非常不稳定的。您可能应该只连接到 JMX 并查看是否有活跃的消费者。

    2. 您可以为您想要的咨询主题添加订阅,或使用通配符来匹配组模式,例如 topic://ActiveMQ.Advisory.Consumer。>

    友好的免责声明——一般来说,设计仅在消费者存在时才发送消息是一种竞争条件,我通常建议不要这样做。在您发送后消费者有可能立即离开。

    编辑:更正 #2 以反映持久订阅不适用于咨询主题

    【讨论】:

    • 这可能长期订阅咨询
    • 是的。咨询主题只是普通主题。像往常一样创建持久订阅。
    • 我从我的回复中删除了这个,因为我从来没有测试过这个并且看过这个帖子,也许这个功能是在stackoverflow.com/questions/17488272/…之后添加的
    • 我会测试你的建议,一旦我有答案就会在这里回复。
    • 感谢您的免责声明,就我而言,我觉得这不是问题:我有一个数据流,旧信息并不重要。只与消费者一起处理主题的想法只是为了减少处理能力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2015-03-19
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多