消息选择器

  将消息选择器应用在消费者,消费者就只会接受能通过过滤器的消息。消息选择器是基于 SQL-92 条件表达式语法的一个子集。消息选择器由三个元素组成:标识符、常量和标记运算符。

标识符

  标识符就是表达式中被比较的那一部分。标识符必须是消息属性或者若干 JMS 消息头之一。

  可以用作标识符的 JMS 消息头包括:JMSDeliveryMode、JMSPriority、JMSMessageID、JMSTimestamp、JMSCorrelationID 和 JMSType。JMSDestination 和 JMSReplyTo 消息头无法用作标识符,因为它们对应的值是 Destination 对象,这些对象的实际值是私有的,因而也是未定义的。JMSRelivered 值可以在传送期间修改,因此不再选择器中使用。JMSExpiration 不能用作标识符,因为这个值会因 JMS 提供者所选的不同实现而异。

常量

  常量是使用硬编码方式写人消息选择器的表达式值。String 常量使用单引号括起来。如果 String 常量中含有单引号,则可以使用两个单引号表示(例如,'Smith''s')。数值常量使用精确数值表示法(+22,30,-100)、近似数值表示法(-33.22,10.00,+7.2)或科学计数法(-9E4、3.5E6)来表示。布尔常量用 true 或 false 来表示。

运算符

  运算符包括算术比较运算符、LIKE 运算符、BETWEEN 运算符、IN 运算符、IS NULL 运算符和逻辑运算符。

示例

  消息选择在 session.createConsumer() 中指定,这样消费者只会在指定的目的地消费通过过滤器的消息。在下面例子中,只有消息属性 status 是 U 或 R,且消息的优先级大于等于 8 的消息才会被消费。

Destination destination = session.createQueue("hello_queue");
String filter = "status IN ('U', 'R') and JMSPriority >= 8";
MessageConsumer msgConsumer = session.createConsumer(destination, filter);

消息过滤的设计

  在设计基于消息的解决方案时,主要有两种消息过滤方式。可以向单个 JMS 目的地发送所有相关的消息,并对消息消费者使用消息过滤器来选择特定的消息,这种方式称之为 Message Filtering(消息过滤)方式。第二种方式使用包含预过滤消息的多个 JMS 目的地,称之为 Multiple Destination(多目的地)方式。

Message Filtering 方式

  在 Message Filtering 方式中,是消息消费者控制了消息过滤,并决定它要接收什么消息。这种方式为消息生产者组件和消息消费者组件提供了更高程度的去耦,因为消息生产者只须了解更少的关于如何处理消息的信息。这对发布/订阅模型来说更是如此,因为主题发布者通常不会注意某个特定主题订阅者的数量和类型。

Multiple Destination 方式

  Multiple Destination 方式在消息发送到目的地之前使用消息过滤。它使用的不是消息选择器,取而代之的则是包含特定消息的多目的地方式。消息生产者通常使用 Java 代码应用过滤逻辑来判断该消息应该被发送到哪一个目的地。由于每个队列或主题包含了一个特殊类型的预过滤消息,消息消费者不必使用消息过滤器来接收它所感兴趣的消息。

混合方式

  可以混合使用两种方式,来平衡单独使用某种方式的局限。

JMS - 消息选择器的更多相关文章

  1. Oozie 生成JMS消息并向 JMS Provider发送消息过程分析

    一,涉及到的工程 从官网下载源码,mvn 编译成 Eclipse工程文件:

  2. JMS学习(三)JMS 消息结构之属性及消息体详解

    一.前言 通过上一篇的学习我们知道了消息分为三个部分,即消息头,属性及消息体,并对消息头的十个属性进行了详细的介绍,本文再对消息属性及消息体进行详细的介绍. 二.属性介绍 消息属性的主要作用是可以对头 ...

  3. JavaEE(6) - JMS消息选择和查看

    1. JMS消息的类型.消息头和消息属性 消息类型: StreamMessage MapMessage TextMessage ObjectMessage BytesMessage JMS消息中的消息 ...

  4. AMQ学习笔记 - 04. 消息选择器

    概述 消息选择器使用类似于SQL语法,为Consumer指定基于Message属性的筛选条件. 消息选择器 发送的时候,给消息添加一些属性:在接收的时候,根据属性进行过滤. API javax.jms ...

  5. 三:JMS消息服务规范

    一:JMS是什么?--->JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API--->用于在两个应用程 ...

  6. JMS消息

    1.消息可分为3部分:消息头.属性和有效负载 消息头:用于标识消息.声明消息属性及提供路由信息的特殊字段组成. 消息的属性区包含了和该消息有关的附加元数据,这个元数据由应用程序开发者进行设置,或者由J ...

  7. JMS 重点是JMS消息结构讲解

    这部分之前认识的不是很清楚,转载记录下,转载自:https://www.cnblogs.com/Zender/p/9098410.html 阅读目录 一,消息服务 二,JMS 回到目录 小时(1000 ...

  8. IBM MQ消息中间件jms消息中RHF2消息头的处理

    公司的技术平台在和某券商对接IBM MQ消息中间件时,发送到MQ中的消息多出了消息头信息:RHF2,造成消息的接收处理不正常.在此记录此问题的处理方式. 在IBM MQ中提供了一个参数 targetC ...

  9. Intellij IDEA 创建消息驱动Bean - 接收JMS消息

    除了同步方式的调用之外,有时还需要异步调用,用来处理不需要即时处理的信息,例如短信.邮件等,这需要使用EJB中的独特组件——消息驱动Bean(Message-Driven Bean,MDB),它提供了 ...

随机推荐

  1. POJ 3666 Making the Grade (DP)

    题意:输入N, 然后输入N个数,求最小的改动这些数使之成非严格递增即可,要是非严格递减,反过来再求一下就可以了. 析:并不会做,知道是DP,但就是不会,菜....d[i][j]表示前 i 个数中,最大 ...

  2. java commons-lang 工具包 逃脱工具 转unicode 及其他

    <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</ar ...

  3. javabean总结

    一. javabean 是什么? Bean的中文含义是“豆子”,顾名思义,JavaBean是指一段特殊的Java类, 就是有默然构造方法,只有get,set的方法的java类的对象. 专业点解释是: ...

  4. VC的文件操作

    各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的.本文将对Visua ...

  5. Enterprise Library 4 数据访问应用程序块

    Enterprise Library 数据访问应用程序块简化了实现常规数据访问功能的开发任务.应用程序可以在各种场景中使用此应用程序块,例如为显示而读取数据.传递数据穿过应用程序层( applicat ...

  6. windows下实现微秒级的延时

    windowsintegeriostream汇编嵌入式任务 最近正在做一个嵌入式系统,是基于windows ce的,外接硬件的时序要微秒级的延时.1.微秒级的延时肯定不能基于消息(SetTimer函数 ...

  7. hadoop 关闭进程时报错no 进程 to stop

    前两天和朋友李天王吃饭的时候,聊到了一个hadoop的运维的很简单问题,感觉很有意思,以前也没有注意过,现在加以重现和整理.   感谢李天王的分享....   翻看了yarn-deamon.sh st ...

  8. 解决IntelliJ IDEA 13更新FindBugs 0.9.993时JRE版本过低导致启动失败问题

    今晚更新FindBugs 0.9.992(FindBugs 2)至FindBugs 0.9.993(FindBugs 3)后,按要求重启IntelliJ IDEA 13.本想看看更新后多了哪些功能,结 ...

  9. Klist

    显示当前缓存的 Kerberos 票证的列表. 有关如何使用此命令的示例 语法 klist [-<LogonId.HighPart> lh] [-li <LogonId.LowPar ...

  10. getDefinitionByName与ApplicationDomain.getDefinition

    主swf 定义:MC,被加载swf 定义:MC.MC1 ①父SWF的应用程序域的新建子域 (默认方式)称其为应用程序域的继承 var app:ApplicationDomain=new Applica ...