2.4.6消息选择器
很多时候,一个JMS客户端订阅了一个目标,但是它只想接收特定类型的消息。这种情况,消息头部和属性正好派上用场。例如,一个消费者到一个队列注册,希望接收到特定股票的消息。只要该消息包含一个股票标识的属性,那么这个功能就很容易实现。JMS客户端可以用消息选择器告诉JMS提供者它要接收某个属性值符合要求的消息。
许多选择器允许JMS客户端基于消息头部的值指定它要接收到消息。选择器使用SQL92子集的条件表达式。消息选择器使用消息头部和属性值来进行布尔计算。不符合的消息将不会投递到客户端。消息选择器不能作用于消息体。
条件表达式作为字符串参数传递给javax.jms.Session创建选择器的方法。这些条件表达式使用包括标识符,字面量和操作符等从SQL92语法继承的符号。这些东西都在下面的表2.1中定义。
上面的这些东西都是用来对消息头部和属性创建查询条件的。看下面列表定义的消息。这条消息定义了两个属性,它们将被用来过滤消息。
Listing 2.4 A JMS message with custom properties
public void sendStockMessage(Session session,
MessageProducer producer,Destination destination,String payload,
String symbol,double price)throws JMSException
{
TextMessage textMessage = session.createTextMessage();
textMessage.setText(payload);
textMessage.setStringProperty("SYMBOL", symbol);
textMessage.setDoubleProperty("PRICE", price);
producer.send(destination, textMessage);
}
现在让我们来看一些使用消息选择器的例子。
Listing 2.5 Filter messages using the SYMBOL header
...
String selector = "SYMBOL = 'AAPL'";
MessageConsumer consumer =
session.createConsumer(destination, selector);
...
列表2.5的程序定义了一个匹配苹果公司消息的选择器。这个消费者只会接收到匹配该选择器的消息。
Listing 2.6 Filter messages using both the SYMBOL and PRICE headers
...
String selector = "SYMBOL = 'AAPL' AND PRICE > "
+ getPreviousPrice();
MessageConsumer consumer =
session.createConsumer(destination, selector);
...
上面的选择器匹配苹果公司并且价格高于之前价格的股票消息。这个选择器将会显示那些价格在上涨的股票消息。但是,如果你对股票消息的时效性有要求,那么可以看看下面的例子。
Listing 2.7 Filter messages using headers
...
String selector = "SYMBOL IN ('AAPL', 'CSCO') AND PRICE > "
+ getPreviousPrice() + " AND PE_RATIO < "
+ getCurrentAcceptedPriceToEarningsRatioThreshold();
MessageConsumer consumer =
session.createConsumer(destination, selector);
...
最后的例子2.7定义了一个更复杂的选择器。这个选择器可以用来匹配苹果及思科公司那些正在增长的,并且市盈率小于当前可接受值的消息。
上面的例子对于你开始使用消息选择器来说已经足够了。但是如果你想要更多的信息,可以参考JMS消息的Javadoc。
消息体
消息体,也就是负载,JMS为它定义了六种Java类型。使用这些Java对象,信息就可以通过消息负载发送出去。
- Message----基本的消息类型。用来发送没有负载,只有头部和属性的消息。最常用在简单的事件通知。
- TextMessage----负载是String类型的消息。用在发送简单文本或XML数据。
- MapMessage----使用一系列name/value(名称/值)做为它的负载。名称使用字符串,值是Java原始类型。
- BytesMessage----包含一个不能被中断字节数组作为负载。
- StreamMessage----包含一些Java原始类型的流,会按顺序被填充和读取。
- ObjectMessage----用来包含一个序列号Java对象。一般用来存储复杂Java对象,也支持Java集合。
- 大小: 23.9 KB
分享到:
相关推荐
### JMS规范教程知识点解析 #### 一、JMS基本概念 **1.1 什么是JMS(JAVA MESSAGE SERVICE)?** JMS,即Java Message Service,是Java平台中的消息服务应用标准,允许应用程序组件通过Java消息服务进行通信。它...
### JMS规范1.1(中文版)关键知识点解析 #### 一、引言 **1.1 摘要** - **主要内容:** 该规范详细介绍了Java消息服务(Java Message Service,简称JMS)的目标及其核心功能。JMS为Java开发者提供了一套统一的...
### JMS规范详解 #### 一、JMS基础概览 **1.1 何为JMS(Java Message Service)?** JMS,即Java消息服务,是Java平台中的消息中间件规范,它允许应用程序创建、发送、接收和读取消息,从而在两台或多台计算机...
### JMS规范教程知识点解析 #### 一、JMS基本概念 **1.1 什么是JMS(JAVA MESSAGE SERVICE)?** JMS,即Java Message Service,是Java平台中的消息服务应用标准,它允许应用程序组件生成、发送、接收以及读取...
它包含了各种服务,如Servlet、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)、JMS(Java Message Service)等,为企业应用提供基础架构。 2. **Java EE 兼容性测试套件**:确保Java EE产品(如应用服务器...
1.3 JMS 规范的变迁 4 2.ActiveMQ 4 2.1 Broker 4 2.1.1 运行Broker 4 2.1.2 嵌入式Broker 4 2.1.3 监控Broker 5 2.2 Transport 9 2.2.1 VM Transport 9 2.2.2 TCP Transport 10 2.2.3 Failover ...
#### 2.4 前瞻性 考虑到未来可能的技术更新和需求变化,架构应具备前瞻性,支持新技术的集成和系统的持续升级。 #### 2.5 安全性 安全性是J2EE架构不可或缺的一部分,包括数据安全、访问控制、事务处理等多个方面...
3. **geronimo-spec-servlet-2.4-rc1.jar**:实现了Servlet 2.4规范,是Web服务器和Java应用程序之间交互的基础,可能用于ActiveMQ的Web管理界面。 4. **geronimo-spec-jsp-2.0-rc1.jar**:提供了JavaServer Pages...
2.4 容器 2.5 资源适配器 2.6 数据库 2.7 Java EE标准服务 2.8 互用性 2.9 产品标准的灵活性 2.10 Java EE产品的扩展 2.11 平台角色 2.12 平台协议 2.13 J2EE 1.3中的变化 2.14 J2EE 1.4中的变化 2.15 Java EE 5...
**2.4 用户验证的必要条件** - 使用HTTP基本认证或表单登录等方式进行用户验证。 **2.5 授权条件** - 定义角色和权限来控制访问。 **2.6 部署标准** - 在部署描述符中定义安全约束。 **2.7 未来的方向** Java...
**2.4 规格化消息交换** - 规格化消息交换机制是JBI的核心,它定义了如何在组件间传递消息。 **2.5 管理** - 包括组件安装、生命周期管理、服务单元部署等方面,确保系统的稳定运行。 **2.6 组件框架** - 提供了...
2.4 JMS(Java Message Service) Resin通过`com.caucho.jms`包实现了JMS接口,允许应用进行消息传递。`MessageServer`类是消息服务的核心,处理消息的生产、消费和队列管理。 2.5 JDBC和JTA Resin支持JDBC数据源和...
ActiveMQ是Apache软件基金会开发的一款开源消息代理,它实现了JMS规范,提供了高效、可靠的消息传递能力。JMS则是一种标准接口,使得应用程序可以与不同的消息中间件进行交互,确保消息的可靠传输。 2. 测试环境...
2. JMX规范 3. 基于JBoss来写MBean 3.1 HelloWorld实例 3.2 程序代码 3.3 配置文件jboss-service.xml 3.4 将实例部署到JBOSS 3.5 MBean的效果 s四.EJB3.0使用说明 1. Enterprice JavaBeans(EJB)的概念 1.1 会话 ...
- **Java消息服务 (JMS)**:实现了异步通信。 - **Java命名和目录接口 (JNDI)**:用于查找和定位服务。 - **JavaMail**:支持电子邮件发送。 - **JavaBean活动框架 (JAF)**:用于构建组件模型。 - **XML处理**:提供...
- **Java消息服务 (JMS)**:用于实现消息中间件。 - **Java命名和目录接口 (JNDI)**:提供查找和定位服务的能力。 - **JavaMail**:支持电子邮件发送。 - **JavaBean活动框架 (JAF)**:用于构建JavaBeans组件。 - **...