JMS - 消息选择器

时间:2022-02-09 01:28:44

消息选择器

  将消息选择器应用在消费者,消费者就只会接受能通过过滤器的消息。消息选择器是基于 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 方式中,是消息消费者控制了消息过滤,并决定它要接收什么消息。这种方式为消息生产者组件和消息消费者组件提供了更高程度的去耦,因为消息生产者只须了解更少的关于如何处理消息的信息。这对发布/订阅模型来说更是如此,因为主题发布者通常不会注意某个特定主题订阅者的数量和类型。

JMS - 消息选择器

Multiple Destination 方式

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

JMS - 消息选择器

混合方式

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

JMS - 消息选择器

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. UNITY和图片像素的换算

    https://zhidao.baidu.com/question/143233873.html 1米X1米换算成像素是2835X2835的

  2. Asp.Net MVC4入门指南(4):添加一个模型

    在本节中,您将添加一些类,这些类用于管理数据库中的电影.这些类是ASP.NET MVC 应用程序中的"模型(Model)". 您将使用.NET Framework 数据访问技术En ...

  3. jstat

    http://hi.baidu.com/savagert/item/6a056619d25bb6426926bb38

  4. 我们一起来排序——使用Java语言优雅地实现常用排序算法

    破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...

  5. arp断网攻击

    arp断网攻击可以是同局域网内主机无法上网!(可恶搞室友哦,嘻嘻!) 实现原理 arp的中文释义是地址解析协议,全英文 address resolution protocol,是一个将局域网IP地址映 ...

  6. linux audit审计(5)--audit规则配置

    audit可以配置规则,这个规则主要是给内核模块下发的,内核audit模块会按照这个规则获取审计信息,发送给auditd来记录日志. 规则类型可分为: 1.控制规则:控制audit系统的规则: 2.文 ...

  7. C++遍历路径下的所有文件

    intptr_t类型用于记录文件夹句柄,注意该类型不是指针类型,而是int型的重定义. _finddata_t结构体类型用于记录文件信息. _finddata_t结构体定义如下 struct _fin ...

  8. html全选和取消全选JS

    <html> <body> <table border="1"> <tr> <th><input type=&qu ...

  9. Tornado&sol;Python 学习笔记(二)

    部分ssrpc.py代码分析 -- 服务端: 1 #!/usr/bin/python3 2 3 from xmlrpc.client import Fault, dumps, loads 4 impo ...

  10. spring in action小结3 运行时值注入

    讨论依赖注入的时候,通常讨论的是一个bean引用注入到另一个bean的属性或者构造器参数中.bean装配的另一个方面是将值注入到bean的属性或者构造器参数中.避免硬编码的方式就是运行时确定值. sp ...