镜像队列
镜像队列
队列提供了一种极好的可靠且高性能的 负载均衡机制。每个放在队列中的消息只能被一个消费者成功处理。这是一件好事!。但是有时您希望监控队列之间生产者和消费者之间的消息流。
为此,您可以使用 虚拟目标 来设置一个虚拟队列,该队列将消息转发到多个物理队列。但是,为系统中的每个队列启用此功能可能会很麻烦。
因此,为了简化队列监控,我们添加了一个名为“镜像队列”的功能。镜像队列就像您消息代理中所有队列的零配置 线路截取。
示例
例如,假设我们有许多生产者向队列 Foo.Bar 发送消息,而消费者从队列 Foo.Bar 消费消息,我们希望监控或查看活动。
如果您启用镜像队列,则默认情况下,您可以订阅主题 VirtualTopic.Mirror.Foo.Bar 并接收发送到队列 Foo.Bar 的所有消息。由于这是一个主题,因此可以根据需要订阅此主题的多个消费者。
如果您愿意,您可以将此功能与 虚拟主题 结合使用;这样您就可以定义一个逻辑消费者;比如叫 A。然后,您可以订阅队列 Consumer.A.VirtualTopic.Mirror.Foo.Bar 以接收发送到队列 Foo.Bar 的所有消息(针对消费者 A)。然后,您可以运行此消费者的多个实例,这些实例可以在彼此之间进行负载均衡。
镜像队列与 虚拟目标 的这种组合对于监控事务流非常有用;例如,使用 业务活动监控 (BAM)。
镜像队列的工作原理
启用后,镜像队列会将发送到队列的每条消息也发送到一个类似名称的主题;这样,那些有兴趣观察队列上的消息交换的人可以从镜像队列主题中消费。
当与上述示例中描述的此主题上的 虚拟主题 结合使用时,您实际上可以在运行时动态创建新队列,这些队列是给定队列的镜像!
启用镜像队列
默认情况下,镜像队列处于禁用状态;因为启用它会为您使用的每个队列创建一个虚拟主题。
要启用镜像队列,请在 BrokerService 上设置 useMirroredQueues 属性,或在以下内容中添加以下内容:
<destinationInterceptors>
<mirroredQueue copyMessage = "true" postfix=".qmirror" prefix=""/>
</destinationInterceptors>
这将为代理上的每个队列创建一个名为“*.qmirror”的主题。