【发布时间】:2019-10-27 13:42:40
【问题描述】:
我们需要将消息从一个 ActiveMQ 代理复制到另一个。这里消息必须只是复制,并且消息应该存在于两个代理中。
我可以想到一个自定义应用程序,它订阅某个目的地并读取该消息并将消息重新发布到多个代理中的目的地。
我无权在代理中进行更改,所以我想不出Network of Brokers 选项。
是否有任何最佳实践或工具可用于将 A-MQ 消息从一个代理复制到另一个代理?
【问题讨论】:
我们需要将消息从一个 ActiveMQ 代理复制到另一个。这里消息必须只是复制,并且消息应该存在于两个代理中。
我可以想到一个自定义应用程序,它订阅某个目的地并读取该消息并将消息重新发布到多个代理中的目的地。
我无权在代理中进行更改,所以我想不出Network of Brokers 选项。
是否有任何最佳实践或工具可用于将 A-MQ 消息从一个代理复制到另一个代理?
【问题讨论】:
在无法访问目标代理的情况下,据我所知和已阅读,我相信没有捷径可以避免重新发布这些消息的自定义应用程序。
但是,根据您要重新发布的消息,ActiveMQ 提供的一些功能可能有助于您的实施(但考虑到计算成本,它们不是免费的)。
例如,如果您想将通过该代理发送的所有消息复制到另一个,那么您可以考虑使用Mirrored Queues,并带有特定的前缀(例如“copy”),这将允许您在该前缀之后使用wildcard 的单个消费者(例如“copy.>”)。该消费者将获得所有发送到代理的消息,这将简化您的实施,因为您只需要关心单个消费者并从中重新发布即可。然而,这是有成本的,因为正如文档中所述,启用镜像队列将复制系统中的每个队列/主题,并将每条消息发布两次。您需要考虑这是否对您的情况造成严重的不便,具体取决于消息的数量和您的代理处理的可用内存。
如果您只想复制 一些 消息而不是全部消息,那么我相信最优雅的处理方式是创建消费者的抽象类(或特定实现),并将该特殊实现用于您要重新发布的那些队列。该类将负责将消息重新发布到其他代理,以在使用它时对其他消费者类透明的方式。
我在上面谈到了消费者,但同样的概念也适用于主题和订阅者。希望这些想法有所帮助:)
【讨论】: