概述


消息选择器使用类似于SQL语法,为Consumer指定基于Message属性的筛选条件。

消息选择器


发送的时候,给消息添加一些属性;在接收的时候,根据属性进行过滤。

API

javax.jms.Message提供了一系列的方法,用于设置属性:
  • setIntProperty(String name, int value):void
    设置int类型的属性
  • setStringProperty(String name, String value):void
    设置字符串类型的属性
  • setObjectProperty(String name, Object value):void
    设置对象类型的属性
除此之外,还有设置boolean、byte、short、long、float、double类型的API,模式相同。
 
javax.jms.Session则提供了在创建MessageConsumer时指定选择器的方法:
  • createConsumer(Destination destination, String messageSelector):MessageConsumer
    为指定的destination创建一个consumer。只有当消息的属性满足选择器的表达式时,才会被接收;选择器为null或者空字符串时,表示没有选择器。
 
在发送的时候为消息指定属性,在接收的时候为Consumer指定选择器。

选择器语法

选择器是字符串类型,官方文档说,选择器的语法类似于SQL的语法。以下仅对int、String类型举例:
 // 假如有int类型的属性order,而我们接收order>10的消息
String messageSelector = "order > 10"; // 假如有String类型的属性kind,而我们接收kind="06"的消息
String messageSelector = "kind='06'";

至于其他类型,多个属性是否支持逻辑运算等,就留在以后需要的时候再尝试吧。

核心代码

发送消息
 final int NUM = 3;
List<Message> result = new ArrayList<Message>(NUM);
try {
for (int i = 0; i < NUM; i++) {
TextMessage message = session.createTextMessage();
message.setText(String.format("This is the %dth message.",
i + 1));
message.setIntProperty("order", i + 1);
result.add(message);
}
} catch (JMSException e) {
e.printStackTrace();
return null;
}
return result; 
接收消息
String messageSelector = "order > 1";
consumer = session.createConsumer(destination, messageSelector); 

AMQ学习笔记 - 04. 消息选择器的更多相关文章

  1. AMQ学习笔记 - 03. 消息的接收方式

    概述 消息有两种接收方式:同步接收和异步接收. 同步接收:主线程阻塞式等待下一个消息的到来,可以设置timeout,超时则返回null. 异步接收:主线程设置MessageListener,然后继续做 ...

  2. AMQ学习笔记 - 07. 持久性订阅

    概述 一般的订阅,订阅者必须时刻处于活跃状态,才不会遗漏任何信息:持久性订阅,当订阅者处于非活动状态时,代理会为它们保留信息,下一次连接之后推送给它们. 持久订阅 与一般的定于相比,持久性订阅需要: ...

  3. AMQ学习笔记 - 09. Spring-JmsTemplate之接收

    概要 JmsTemplate提供了4组*3,共计12个接收用的方法.   JmsTemplate接收所需要的资源ConnectionFactory和Destination,和发送是一致的.   接收的 ...

  4. Linux进程间通信IPC学习笔记之消息队列(SVR4)

    Linux进程间通信IPC学习笔记之消息队列(SVR4)

  5. 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)

    机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...

  6. SaToken学习笔记-04

    SaToken学习笔记-04 如果有问题,请点击:传送门 角色认证 在sa-token中,角色和权限可以独立验证 // 当前账号是否含有指定角色标识, 返回true或false StpUtil.has ...

  7. Redis:学习笔记-04

    Redis:学习笔记-04 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 10. Redis主从复制 1 ...

  8. jQuery学习笔记(一)jQuery选择器

    目录 jQuery选择器的优点 基本选择器 层次选择器 过滤选择器 表单选择器 第一次写博客,希望自己能够长期坚持,以写博客的方式作为总结与复习. 最近一段时间开始学习jQuery,通过写一个jQue ...

  9. AMQ学习笔记 - 05. 客户端模板化

    概述 客户端编程模型中,大部分的步骤都是相同的.将相同的部分做成模板,将不同的部分预留接口,实现者就只需要针对不同的部分提供实现. 设计 类图 发送方客户端 说明: 基于模板的思想,SendTempl ...

随机推荐

  1. 如何在自家厨房里制作LSD

    如何在自家厨房里制作LSD -------------------------------------------------------------------------------- D-麦角酸 ...

  2. [bzoj2621] [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    题目链接 状压\(dp\) 根据套路,先设\(f[sta]\)为状态为\(sta\)时所用的最小分组数. 可以发现,这个状态不好转移,无法判断是否可以装下新的一个物品.于是再设一个状态\(g[sta] ...

  3. visio中相关设置-菜单视图

    1.获取或设置窗口中页面的当前显示大小(缩放系数) Window.Zoom Dim dZoom As Double dZoom = m_Visio.Window.Zoom'获取显示比例 m_Visio ...

  4. Visual Studio调试之符号文件

    原文链接地址:http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html 前面在不能设置断点的检查步骤和Visual Studio ...

  5. 【BZOJ 3144】 [Hnoi2013]切糕 真·最小割

    一开始一脸懵逼后来发现,他不就是割吗,我们只要满足条件就割就行了,于是我们把他连了P*Q*R条边,然而我们要怎样限制D呢?我们只要满足对于任意相邻的两条路,只要其有个口大于D就不行就好了因此我们只要把 ...

  6. 如何设置项目encoding为utf-8

    1.鼠标右键点击项目,选择[properties] 2.选择[Resource],在Text file encoding里面选择UTF-8,点击[ok] 大功告成! 木头大哥所发的文章均基于自身实践, ...

  7. bulk_insert_buffer_size and InnoDB

    Q: I read the following on this page http://dev.mysql.com/doc/mysql/en/server-system-variables.html ...

  8. weblogic的安装和注意的问题以及在idea怎么用weblogic启动一个web服务

    第一步下载weblogic: 大家可以通过我的网盘下载weblogic,地址如下 https://pan.baidu.com/s/1NkZ_Gd-xfim5YGcdtjYoUw 第二步安装weblog ...

  9. bzoj4589 FWT xor版本

    4589: Hard Nim Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 865  Solved: 484[Submit][Status][Disc ...

  10. javascript中top、clientTop、scrollTop、offsetTop的讲解

    下面结合各上图介绍一下各个属性的作用: 一.offsetTop属性: 此属性可以获取元素的上外缘距离最近采用定位父元素内壁的距离,如果父元素中没有采用定位的,则是获取上外边缘距离文档内壁的距离.所谓的 ...