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

时间:2014-05-14 22:44:22

标签: activemq message-queue

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

尽管自问这个问题以来已经过去了很长时间,但我还是要发布此答案,以防万一有人到达这里寻找与我相同的东西。我希望它对讨论有所帮助。

不幸的是,据我所知并尝试过(用于解决与您类似的特定问题),不可能仅在其中一个队列中启用 Mirrored Queues 的功能。具有多个队列的代理配置。就像您所说的那样,从今天开始,您将不得不复制通过该代理传递的每条消息来遭受性能损失。

但是 Mirrored Queues 是设置在代理配置中的范围,因此,还有另一种选择(不是说会更容易或没有性能成本)。您可能具有与主要经纪人进行通信的另一个经纪人,其中仅包含您需要镜像/监视的队列。当然,这将使您的系统架构更加复杂,因为您需要通信2个代理(其间的延迟会影响它们之间的通信),但是至少您不需要为您的所有队列创建镜像队列。系统,并且如果您有一个具有数千个队列的系统并且只想镜像其中很少的队列,则可以考虑采用另一种方法。

拉尔夫的答案,我相信不会回答您的问题,因为要转发到镜像队列,您必须以前为所有队列激活该功能经纪人,那是你不想要的。由于我的帐户信誉不到50,所以我无法在他的回答下发表评论,这就是为什么我在这里写下来。