消息选择器

  将消息选择器应用在消费者,消费者就只会接受能通过过滤器的消息。消息选择器是基于 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. ASP.NET MVC程序传值方式:ViewData,ViewBag,TempData和Session

    转载原地址 http://www.cnblogs.com/sunshineground/p/4350216.html 在ASP.NET MVC中,页面间Controller与View之间主要有以下几种 ...

  2. UVALIVE 4970 最小权匹配

    首先贴一下这道题的BNU地址,UVA地址自己找吧. http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=11852 题意:这道题的意思就是,给你N个棋子的 ...

  3. Unity3D之Mecanim动画系统学习笔记(六):使用脚本控制动画

    控制人物动画播放 这里我重新弄了一个简单的场景和新的Animator Controller来作为示例. 下面先看看Animator Controller的配置: 人物在站立状态只能进入走路,走路只能进 ...

  4. 在VS.NET中根据条件设置不同的MainForm

    在VS.NET中有时候需要根据不同的条件设置不同的MainForm,例如:在程序第一次运行时候打开设置基本信息或服务器信息窗口等. 1.找到VS.NET中设置MainForm的窗口: 2.在编辑窗口中 ...

  5. Android访问WebService的两种方法

    首先解释一下WebService:WebService是一种基于SOAP协议的远程调用标准.通过WebService可以将不同操作系统平台,不同语言.不同技术整合到一起.详细见:http://baik ...

  6. 创建虚拟交换机(New-VMSwitch)

    #获取网卡列表Get-NetAdapter

  7. poj2105 IP Address(简单题)

    题目链接:id=2105">http://poj.org/problem?id=2105 ----------------------------------------------- ...

  8. TC srm 673 300 div1

    TC srm.673 300 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 Description 给你n(n<=50)匹马和n个人,一匹马和一个人能 ...

  9. C++技术问题总结-第12篇 设计模式原则

    设计模式六大原则,參见http://www.uml.org.cn/sjms/201211023.asp. 1. 单一职责原则 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类仅仅负责一项职责 ...

  10. 解决MySQL不允许从远程访问的方法

    mysql -u root -p mysql>use mysql; mysql>select 'host' from user where user='root'; mysql>up ...