监听在运行时创建的新 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
的对象,可以从中提取新主题的名称。
应用程序可以使用此名称订阅,就像订阅任何其他主题一样。
我正在处理应用程序(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
的对象,可以从中提取新主题的名称。
应用程序可以使用此名称订阅,就像订阅任何其他主题一样。