监听在运行时创建的新 ActiveMQ 主题

Listening to new ActiveMQ topic as they created in runtime

我正在处理应用程序(spring 引导应用程序),它应该从其他应用程序在运行时创建的主题中监听。

如何知道运行时在Active MQ Brocker上创建了一个新主题? 我如何开始在运行时收听新创建的主题?

请注意,我想收听在运行时创建的主题,而不是在启动时(应用程序启动,spring 应用程序上下文已构建)。

我不知道当我的应用程序启动时我可能需要听多少话题。主题是在运行时创建的,没有特定的命名模式。

如果没有 'durability',这会出现竞争条件。如果生产者在消费者在线之前发送消息,则代理不会为消费者保留消息。 'durability' 是代理为消费者保留消息,即使消费者未连接时也是如此。

但是! ActiveMQ 通过为消费者使用通配符名称解决了这个问题。建议您至少同意一个前缀以提供第一级过滤。注意——如果你去 multi-broker 架构,你也会想要这个。类似于 topic://ORDER.ABCD、topic://ORDER.XYZ 之类的东西,其中所有主题都使用相同的格式创建,即 'ORDER.$randomStuff'.

选项 1: 让消费者使用 ActiveMQ 的通配符“>”注册持久订阅。 IE。 topic://ORDER.>

选项 2: 您可以在 ActiveMQ.Advisory 主题上监听目标创建时间的事件,然后注册消费者。但是,这具有可能会丢失消息的竞争条件。

选项 1 可能是您的最佳选择,但如果您开始达到每天 100M 条消息或 1000 条主题总数的消息负载,则可能 运行 会遇到扩展问题。

订阅咨询主题 ActiveMQ.Advisory.Topic(需要启用咨询 -- 请参阅 [1])。每次创建主题时,都会向该主题发布一条消息。该消息的正文将是 class org.apache.activemq.command.DestinationInfo 的对象,可以从中提取新主题的名称。

应用程序可以使用此名称订阅,就像订阅任何其他主题一样。

[1] http://activemq.apache.org/advisory-message.html