队列中的消息只能被一个消费者消费,如果我们希望能够监视生产者和消费者之间的消息流,可以使用镜像队列。
镜像队列:broker会把发送到某个队列中的所有消息转发到一个名称类似的主题中,因此监控程序可以监听这个主题。
为了启用镜像队列,需要在activemq.xml中将broker的useMirroredQueues设置为true,然后通过destinationInterceptors设置其它属性。镜像主题的前缀(prefix)默认为“VirtualTopic.Mirror. ”。
下面给出一个具体的配置示例。
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost"
dataDirectory="${activemq.data}" useMirroredQueues="true">
<transportConnectors>
<transportConnector uri="tcp://localhost:61616"/>
</transportConnectors>
<destinationInterceptors>
<mirroredQueue copyMessage = "true" prefix="Mirror.Topic."/>
</destinationInterceptors>
……
</broker>
向队列Queue.Tool发送消息,那么生产者端的代码
String subject = "Queue.Tool";
……
Queue queue = session.createQueue(subject);
主题订阅者端的代码,注意前缀和队列名的拼接,莫因为“.”出错。
String subject = " Mirror.Topic.Queue.Tool";
……
Topic topic = session.createTopic(subject);