概述


消息选择器使用类似于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); 

最新文章

  1. underscore源码阅读记录(二)
  2. HoverTree系统源码介绍
  3. OpenGIS Simple feature access
  4. 解析PHP中的file_get_contents获取远程页面乱码的问题【转】
  5. Java进阶之多线程
  6. (转载)基于Bash命令行的百度云上传下载工具
  7. XMLHttpRequest2 异步 ajax
  8. python_利用高阶函数实现剪枝函数
  9. angularjs 指令详解
  10. ubuntu make menuconfig error
  11. 企业IT管理员IE11升级指南【10】—— 如何阻止IE11的安装
  12. SFTP远程连接服务器上传下载文件-vs2010项目实例
  13. 【转】ArcGIS10.0完全卸载全攻略
  14. rabbitmq - java client lib一二事
  15. 五:python 对象类型详解二:字符串(上)
  16. .NET:Assembly.CodeBase vs. Assembly.Location
  17. 尚硅谷JavaSEday18 String类练习题
  18. springboot的yaml基础语法与取值,配置类,配置文件加载优先级
  19. 宝塔Linux常用命令
  20. Redis哨兵模式主从同步不可以绑定127.0.0.1或者0.0.0.0,不然无法进行主从同步

热门文章

  1. [Leetcode] subsets ii 求数组所有的子集
  2. 洛谷 P2893 [USACO08FEB]修路Making the Grade 解题报告
  3. [洛谷P2016] 战略游戏 (树形dp)
  4. [hdu 4417]树状数组+离散化+离线处理
  5. [poj 2104]主席树+静态区间第k大
  6. c++ 公有继承的赋值兼容规则
  7. React 使用 fetch 请求天气
  8. 在eclipse中使用JUnit4,以及使用JUnit4进行单元测试的技巧
  9. eclipse 4.2生成wsdl 客户端
  10. 图论:2-SAT