【发布时间】:2017-06-13 15:49:54
【问题描述】:
我是消息传递的新手,但我加入了一个大量使用消息传递的支持项目。
因此,该项目使用 Tibco 并且在 Tibco 中 - 使用图形 UI 将主题连接到队列非常容易。
现在我们想要移动到活动 mq - 并且刚刚开始阅读它 - 找不到将主题连接到队列的简单方法
有什么想法吗?
谢谢
【问题讨论】:
我是消息传递的新手,但我加入了一个大量使用消息传递的支持项目。
因此,该项目使用 Tibco 并且在 Tibco 中 - 使用图形 UI 将主题连接到队列非常容易。
现在我们想要移动到活动 mq - 并且刚刚开始阅读它 - 找不到将主题连接到队列的简单方法
有什么想法吗?
谢谢
【问题讨论】:
取决于您所说的桥接的含义。 ActiveMQ 有几个功能可以帮助您。
Mirrored Queues。如果您启用镜像队列,那么默认情况下您可以订阅主题 VirtualTopic.Mirror.Foo.Bar 并接收发送到队列 Foo.Bar 的所有消息。由于它是一个主题,因此许多消费者可以根据需要订阅该主题。
Virtual Topics Destinations:虚拟主题背后的想法是生产者以通常的 JMS 方式发送到主题。消费者可以继续使用 JMS 规范中的主题语义。但是,如果主题是虚拟的,消费者可以从物理队列中消费逻辑主题订阅,从而允许许多消费者在许多机器和线程上运行以实现负载平衡。
Broker Camel Component:在 ActiveMQ 代理中嵌入 Apache Camel 为使用 Camel 的集成功能扩展消息代理提供了极大的灵活性。 Apache Camel 路由的好处还在于,如果您使用 activemq 组件,您可以避免远程连接到 ActiveMQ 的序列化和网络成本。
【讨论】:
除了 Tim Bish 的出色回答之外 - 您还可以在 activemq xml 配置中使用复合目标来将消息从主题显式转发到队列。然而,最简单的方法是使用虚拟主题,无需配置 - 只需命名约定。
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeTopic name="THE.TOPIC">
<forwardTo>
<queue physicalName="THE.QUEUE" />
</forwardTo>
</compositeTopic>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>
【讨论】:
要启用镜像队列(请参阅http://activemq.apache.org/mirrored-queues.html),请添加以下内容 在 XML 配置的元素中:
<destinationInterceptors>
<mirroredQueue copyMessage = "true" postfix=".rec" prefix=""/>
</destinationInterceptors>
这将为您的代理上的每个队列创建一个名为“*.rec”的主题。
因此,放入队列“Q1”的每条消息也将发送到主题“Q1.rec”
【讨论】: