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

问题描述

我正在开发应从运行时从其他应用程序创建的主题的应用程序(spring boot应用程序)。

如何知道运行时在Active MQ brocker上创建的新主题? 以及如何在运行时开始监听新创建的主题

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

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

解决方法

如果没有“耐用性”,则表示存在竞争状况。如果生产者在消费者在线之前发送了一条消息,则代理将不会保留该消费者的消息。 “持久性”是即使消费者未连接,代理仍为消费者保留消息。

但是! ActiveMQ通过使用通配符名称来解决此问题。建议您至少同意一个前缀以提供第一级过滤。注意-如果您要使用多代理架构,则也将需要此功能。像topic://ORDER.ABCD、topic://ORDER.XYZ之类的东西,其中所有主题均以相同的格式创建,即“ ORDER。$ randomStuff”。

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

选项2: 您可以在ActiveMQ.Advisory主题上侦听有关何时创建目标的事件,然后注册使用者。但是,这是一种竞争条件,可能会丢失消息。

选项1可能是最好的选择,但如果您开始每天增加100万条消息或主题总数的1000条消息的负荷,就会遇到扩展问题。

,

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

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

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