使用ActiveMQ,可以强制代理重新发送咨询消息吗?

时间:2016-09-20 17:37:42

标签: spring jms activemq spring-messaging

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

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

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

有没有办法强制activeMQ发送主题或类似内容的所有咨询消息?

2 个答案:

答案 0 :(得分:1)

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

ActiveMQ.Advisory.NoConsumer.Topic.YourTopic

如果您收到有关此主题的消息,则表示没有消费者连接

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

答案 1 :(得分:1)

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

  2. 您可以为所需的顾问主题添加订阅,也可以使用通配符匹配组模式,例如topic://ActiveMQ.Advisory.Consumer.>

  3. 友好免责声明 - 一般而言,设计仅在消费者存在时发送消息是竞争条件,我通常会建议不要这样做......消费者在发送后就会立即消失。

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