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); |
本文来自博客园,作者:一尾金鱼,转载请注明原文链接:https://www.cnblogs.com/ywjy/articles/5433826.html