是否可以在ActiveMQ中镜像单个队列?

问题描述 投票:2回答:2

我在生产系统中运行ActiveMQ。我们的一些队列的音量非常高,而且有些音量非常低。我有兴趣镜像其中一个低容量队列,这样我就可以围绕收到的消息构建非正式的监控服务。

不幸的是,the only documentation I've been able to find似乎暗示镜像队列是全有或全无:你要么为你拥有的每一个队列创建一个主题(并且复制流经你系统的每条消息都会受到性能损失),或者你不能使用这个功能。

是否无法为单个已知队列名称启用此有用功能?

activemq message-queue
2个回答
5
投票

您可以像这样镜像单个队列:

<destinationInterceptors>
    <virtualDestinationInterceptor>
        <virtualDestinations>
            <compositeQueue name="YOUR.QUEUE" forwardOnly="false">
                <forwardTo>
                    <queue physicalName="MIRROR.OF.YOUR.QUEUE"/>
                </forwardTo>
            </compositeQueue>
        </virtualDestinations>
    </virtualDestinationInterceptor>
</destinationInterceptors>

您可以找到虚拟目的地here的文档。


1
投票

尽管自问这个问题以来已经过去了所有的时间,我将发布这个答案,万一有人来到这里寻找和我一样的事情。我希望它有助于讨论。

不幸的是,据我所知并尝试过(为了解决与您类似的特定问题),不可能在具有多个队列的代理配置中仅为一个队列启用镜像队列的功能。截至今天,正如您所说,您将不得不通过复制流经该代理的每条消息来承受性能损失。

但镜像队列是一个在代理配置范围内的设置,因此,有一个替代方案(不是说更容易或没有性能成本)。您可能有另一个代理与主代理通信,其中只包含您需要镜像/监视的那些队列。当然,这会使您的系统架构变得更加复杂,因为您需要与2个代理进行通信(随后它们之间的通信会产生延迟影响),但至少您不需要为您的所有队列创建镜像队列。系统,如果你有一个拥有数千个队列的系统而且只是想要反映它们中的极少数,这可能是另一种考虑因素。

Ralf的答案我认为没有回答你的问题,因为要转发到镜像队列,你必须先为代理中的所有队列激活该功能,这是你不想要的。由于我的账户声誉低于50,我无法在他的回答下评论,这就是我在这里写的原因。

© www.soinside.com 2019 - 2024. All rights reserved.