1

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

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

如果事件发生在我注册到该主题之后,那将非常有效。但是在我注册这个监听器之前,我可能已经在一个主题中有一个消费者。

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

4

2 回答 2

1
  1. 通过咨询跟踪活跃订户将非常不稳定。您可能应该只连接到 JMX 并查看是否有活跃的消费者。

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

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

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

于 2016-09-20T18:25:35.957 回答
1

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

ActiveMQ.Advisory.NoConsumer.Topic.YourTopic

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

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

于 2016-09-20T18:02:37.457 回答