在之前我们介绍了ActiveMQ的Queue模式和Topic模式,其中Queue模式下,每一个消息只能被一个消费者消费,然而有时我们希望能够监视生产者和消费者之间的消息流。
这里我们可以通过ActiveMQ之组合Destination的方式也是可以的,不过这种方式就要求所有发送Queue模式消息,就必须的都要加上一个额外的Destination,这样配置就可能会很麻烦。所以ActiveMQ这里还为我们提供了镜像队列。
在开启镜像队列之后,Broker会把发送到某一个队列上的所有消息转发到一个名称类似的topic,因此监控程序只需要订阅这个topic即可。
这里启用MirroredQueue,首先要将BrokerService的useMirroredQueues
属性设置为true,如下:
然后我们就进行测试,就发送一个普通的Queue消息,然后进行查看其控制台的Topic菜单,如下:
从上述发现其镜像队列缺省是VritualTopic.Mirror.
,如果有需要的话,我们可以通过<destinationInterceptors>
设置其属性,如镜像队列的前缀、后缀等,如下:
上述方法我们就利用了镜像队列将Queue模式的消息保留下来,存在到对应的Topic镜像队列中,然后我们如果向对其进行处理就可以对其Topic进行持久化订阅。
其实镜像队列,包括ActiveMQ死信队列都没有什么特别,我们都是可以将其看成和其它队列一致,对其进行相关的处理的。