JMS 主题与选择器
Posted
技术标签:
【中文标题】JMS 主题与选择器【英文标题】:JMS Topic vs Selector 【发布时间】:2011-08-27 16:54:23 【问题描述】:JMS 主题和 JMS 选择器是完全不同的概念,但它们都可以被消费者用来获取消息的子集。
在 PubSub 场景中,使用以下方式过滤消息的优缺点是什么:
选项 1) 在单个主题中发布所有内容,消费者使用 JMS 选择器
选项 2) 订阅者订阅一个或多个主题。
示例: 我正在发布客户端数据消息,而订阅者可能只想获取特定类型的客户端。客户端类型在不同的属性中定义,例如“ClientGroup”“ClientSource”“ClientOrgUnit”“ClientSize”等
我该怎么办: 1) 为每种客户类型创建不同的主题 或 2)关于主题和JMS属性中的每种类型并让订阅者使用选择器?
谢谢
【问题讨论】:
【参考方案1】:一般来说,基于主题字符串的选择应该更快。在 WebSphere MQ 集群中选择主题的一个副作用是消息不会分发到不会使用它们的网络节点。在 WMQ V6 中,消息选择器是在客户端实现的,因此应用程序仍会获取每条消息,但只会看到与选择条件匹配的消息。在 WMQ V7 中,QMgr 将执行选择,但消息必须到达 QMgr 才能发生。因此,如果每个客户端都订阅了相同的主题,那么消息将流向客户端连接的每个 QMgr。但是,如果客户端在主题树中的细粒度点进行订阅,则消息只会发送到订阅了它们的节点。
除了分布之外,主题或属性选择的问题很大程度上受分类法的影响。主题树的设计应根据逻辑数据层次结构提供粒度,但与文件系统不同,没有“软链接”可能覆盖树内的替代结构。这是一个简单的层次结构。
在许多情况下,如果在主题树中使用这些数据元素会破坏分类法,但选择时需要这些元素。这些是属性的候选者。
主题元素在本质上往往更具分类性。地区、成本中心、部门编号、分支机构编号等项目往往会落入主题树,因为它们用于根据分类业务需求对数据进行分区。
因此,作为一般规则,您可以使用主题来总结交易。这些通常遵循您已经用于定义业务的现有和自然分类法。例如,部门或成本中心是两个常见的元素。如果您可以轻松想象按该值细分的报告,则它可能是主题元素。 “显示来自分支 01234 的所有交易”就是一个示例。对属于特定事务的属性而不是类别的事物使用属性。这里的例子包括颜色或价格。 “向我显示蓝色项目的所有交易”的可能性听起来是错误的,因为蓝色不是分类元素,因此可能不是主题树的良好候选者。 (除非您从事油漆行业!)
【讨论】:
这是一个非常好的和完整的答案。这里的关键概念是“分类”与“属性”。非常感谢。以上是关于JMS 主题与选择器的主要内容,如果未能解决你的问题,请参考以下文章
JMS 选择器,用于在带有 Camel 和蓝图的一个标头中具有下划线的消息