在ActiveMQ中每一个queue中的消息只能被一个消费者消费,然而有时候我们希望能够监视生产者和消费者之间的queue消息流,即想获得queue中的消息,但queue不能像topic一样发给多个消费者。为解决这种需要,ActiveMQ提供了镜像队列功能:将队列中的消息copy一份到一个主题中,我们想监控某队列的消息就订阅这个主题。镜像队列功能只能在ActiveMQ中间件中配置,暂时无法通过代码来实现,配置在apache-activemq-5.15.10\conf\activemq.xml上面
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
......
<destinationInterceptors>
<!--prefix指定主题的前缀,默认是 VirtualTopic.Mirror.
postfix 指定主题的后缀 默认无
-->
<mirroredQueue copyMessage="true" postfix=".qmirror" prefix=""/>
</destinationInterceptors>
......
</broker>
在没有配置postfix和prefix的情况下,会使用默认前缀 VirtualTopic.Mirror.来组装queue镜像topic,如队列A.B,变成镜像topic后就是VirtualTopic.Mirror.A.B,如果在指定postfix或prefix情况下,如上面的配置,那么镜像队列就会变为A.B.qmirror了。需要注意的是镜像队列是针对所有的queue都会创建一个topic,但是如果想要针对某一个队列实现多个订阅的话,我们可以通过virtualDestination来实现,具体可以参考https://blog.csdn.net/XinhuaShuDiao/article/details/103558631这里的实现。