【发布时间】:2013-12-06 02:17:57
【问题描述】:
我有一个无法更改的 JMS 发布者(外部系统)。这个发布者将消息发布到一些预定义的 JMS 队列中。我想设计一个多节点订阅系统,其中所有订阅节点都将收到每条消息的副本(在我的设计中,订阅节点能够通过检查消息中的某些属性来实现消息是否针对该节点,因此只有一个订阅者节点最终会处理该消息,而其他订阅者节点将丢弃它们的副本)。
将发布者系统更改为使用主题可以完美运行,但我无法更改发布者。
目前,我看到了两种解决方案:
一个可能可行的选项是使用 QueueBrowser,实施定期轮询,它将读取所有消息,如果消息是“我的”,则从队列中删除消息并处理。对于这样一个简单的问题,这是一个巨大的开销。
另一种选择是编写一个调度程序,它订阅队列并将每条消息分发给多个“内部”订阅者(例如,此处解释为:JMS - Going from one to multiple consumers)。但这会在调度程序中造成瓶颈,扼杀整个可伸缩性的想法。
第三种选择是拥有多个“中间”队列订阅者,每个订阅者在收到消息时,将其重新发布到目标订阅者将订阅的主题。这可以工作,但它是流程中的额外一跳,因此不确定收益(可扩展性)是否值得损失(延迟和复杂性)。
我想知道关于如何解决这个问题是否还有其他想法。
- 我可以让订阅者收听所有主题吗?
- 我可以配置 JMS(在我的例子中是 WebLogic)将消息从队列自动转发到某个主题吗?
- 其他选项?
谢谢。
【问题讨论】:
-
使用 Oracle Service Bus,您可以将队列路由到上面 #2 中提到的主题。它是一个可选的中间件,可以与 Weblogic 一起安装。它具有用于 JMS 和 Web 服务的各种路由选项。 orafmwschool.com/oracle-service-bus-routing-and-transformation
-
有意思,看来可以解决问题了。谢谢。如果您愿意,请将其作为答案,以便我标记您的答案。