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

概述


消息选择器使用类似于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类型举例:
1 // 假如有int类型的属性order,而我们接收order>10的消息
2 String messageSelector = "order > 10";
3 
4 // 假如有String类型的属性kind,而我们接收kind="06"的消息
5 String messageSelector = "kind='06'";

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

核心代码

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



来自为知笔记(Wiz)



posted on 2016-04-26 11:17  一尾金鱼  阅读(1396)  评论(0编辑  收藏  举报