JMS主题与选择器

时间:2011-05-18 02:11:48

标签: java-ee jms activemq ibm-mq

JMS主题和JMS选择器是完全不同的概念,但消费者可以使用它们来仅获取消息的子集。

在PubSub场景中,使用以下内容过滤消息的专业人员和合作伙伴是什么:

选项1)在单个主题中发布所有内容,而消费者使用JMS选择器

选项2)订阅者订阅一个或多个主题。

例:
我正在发布客户端数据消息,订阅者可能只想获得特定类型的客户端。客户端类型在不同的属性中定义,如'ClientGroup''ClientSource''ClientOrgUnit''ClientSize'等

我该怎么办:
1)为每个客户类型创建不同的主题
OR
2)关于主题并让每个类型都在JMS属性中并让订阅者使用选择器?

谢谢

1 个答案:

答案 0 :(得分:15)

通常,基于主题字符串的选择应该更快。在WebSphere MQ集群中选择主题的副作用是消息不会分发到不会消耗它们的网络节点。在WMQ V6中,消息选择器在客户端实现,因此应用程序仍然可以获取每条消息,但只能看到符合选择条件的消息。在WMQ V7中,QMgr将执行选择,但是消息必须到达QMgr才能实现。因此,如果每个客户端都订阅了相同的主题,那么消息将流向客户端所连接的每个QMgr。但是,如果客户端在主题树中的粒度点进行订阅,则消息将仅发送到某些订阅它们的节点。

除了分发外,主题或财产选择问题受分类学的影响很大。主题树的设计应根据逻辑数据层次结构提供粒度,但与文件系统不同,没有“软链接”可以覆盖树中的替代结构。这是一个简单的层次结构。

在许多情况下,如果在主题树中使用数据元素会破坏分类法,但这些元素是选择所必需的。这些是物业的候选人。

主题元素往往更具有绝对性。区域,成本中心,部门编号,分支编号等项目往往属于主题树,因为它们用于根据分类业务要求对数据进行分区。

因此,作为一般规则,请使用可用于汇总事务的事项的主题。这些通常遵循您已用于定义业务的现有和自然分类法。例如,部门或成本中心是两个共同的要素。如果您可以轻松地想象按该值细分的报表,则可能是主题元素。 “向我显示来自分支01234的所有交易”就是一个例子。将属性用于特定事务属性而非类别的属性。这里的例子包括颜色或价格。机会是“向我展示蓝色项目的所有交易”听起来是错误的,因为蓝色不是一个绝对元素,因此可能不是主题树的好候选者。 (除非你从事油漆业务!)