前面的例子中创建一个消息消费者使用的是:
sesssion.createConsumer(destination)
另外,还提供了另一种方式:
sesssion.createConsumer(destination, selector)
这里selector是一个字符串,用来过滤消息。也就是说,这种方式可以创建一个可以只接收特定消息的一个消费者。Selector的格式是类似于SQL-92的一种语法。可以用来比较消息头信息和属性。
下面的例子中,创建两个消费者,共同监听同一个Queue,但是它们的Selector不同,然后创建一个消息生产者,来发送多个消息。
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class JMSSelectorTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Queue queue = new ActiveMQQueue("testQueue");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer comsumerA = session.createConsumer(queue, "receiver = 'A'");
comsumerA.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("ConsumerA get " + ((TextMessage) m).getText());
} catch (JMSException e1) { }
}
});
MessageConsumer comsumerB = session.createConsumer(queue, "receiver = 'B'");
comsumerB.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("ConsumerB get " + ((TextMessage) m).getText());
} catch (JMSException e) { }
}
});
MessageProducer producer = session.createProducer(queue);
for(int i=0; i<10; i++) {
String receiver = (i%3 == 0 ? "A" : "B");
TextMessage message = session.createTextMessage("Message" + i + ", receiver:" + receiver);
message.setStringProperty("receiver", receiver);
producer.send(message );
}
}
}
结果如下:
ConsumerA get Message0, receiver:A
ConsumerB get Message1, receiver:B
ConsumerB get Message2, receiver:B
ConsumerA get Message3, receiver:A
ConsumerB get Message4, receiver:B
ConsumerB get Message5, receiver:B
ConsumerA get Message6, receiver:A
ConsumerB get Message7, receiver:B
ConsumerB get Message8, receiver:B
ConsumerA get Message9, receiver:A
可以看出,消息消费者只会取走它自己感兴趣的消息。
分享到:
相关推荐
根据提供的文件信息,我们可以梳理出一系列与JMS相关的硕士学位论文的研究方向及主要内容。JMS(Java Message ...通过对这些论文的学习和研究,可以全面了解JMS技术的最新发展动态及其在企业级应用中的重要作用。
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的API...通过阅读"JMS简明教程.pdf",你可以进一步深化对JMS的理解,同时"中国java下载站.url"可能是获取更多Java资源和学习资料的链接。
WebLogic的主要功能包括:应用服务器、JMS消息队列、数据源管理、集群支持、安全管理、监控和诊断工具等。 二、WebLogic安装与配置 学习资料中可能包含WebLogic的安装步骤,包括下载、安装、配置环境变量等。配置...
这篇"ActiveMQ学习笔记之九--发送消息到队列中"主要探讨的是如何通过编程方式向ActiveMQ队列发送消息,这对于理解和应用消息中间件至关重要。 首先,我们要理解ActiveMQ中的队列(Queue)概念。队列是一种先进先出...
7. **JMS路由**:《JBoss_ESB学习笔记9——第八个ESB应用JMS_Router.doc》和《JBoss_ESB学习笔记10——第九个ESB应用JMS_Topic.doc》涉及到了JMS(Java Message Service)在ESB中的应用,讲解了如何利用ESB进行消息...
- **重点**:学习如何使用JMS Router组件实现消息路由。 - **实现**:配置JMS Router,使其能够根据规则将消息路由到不同的目的地。 #### 十、第九个ESB应用JMS Topic - **重点**:使用JMS Topic组件实现发布订阅...
九、JAF(JavaBeans Activation Framework) JAF允许程序处理未知的数据类型,如电子邮件附件,通过MIME类型识别和激活。 十、JMS(Java Message Service) JMS是Java的消息中间件标准,用于异步消息传递和解耦应用...
本压缩包是Tibco学习的宝贵资源,包含了九份PDF文档以及相关的Java包,适用于Java和C#开发者。以下是这些资源的详细解读: 1. **tibjms.jar和jms.jar**: 这两个是Java消息服务(JMS)的实现库。tibjms.jar是Tibco...
下面将详细解释标题和描述中提及的九个关键术语。 1. **JMS(Java Message Service)** JMS是Java平台中用于在分布式环境中进行异步消息传递的标准API。它允许应用程序创建、发送、接收和读取消息,提供了消息队列...
JSP提供了九个内置对象,如`request`、`response`、`session`、`application`等,它们对应于Servlet API中的请求、响应、会话和应用范围的对象,可以直接在JSP页面中使用,无需额外的实例化。 **6. JSP最佳实践** -...
熟悉JNDI、JMS、JTA/JTS、JMX、JavaMail等J2EE技术,对于构建企业级应用和服务至关重要。 #### 十四、企业级JavaBeans(EJB) 最后,深入理解EJB(Stateless/Stateful Session Bean、Message-Driven Bean)的组件模式...
- **JMS**:掌握Java Message Service,学会使用JMS进行消息传递。 - **JTA/JTS**:了解Java Transaction API/Java Transaction Service,学会使用JTA进行事务管理。 - **JMX**:掌握Java Management Extensions,...
- **JTA/JMS**:理解Java事务服务(JTA)与Java消息服务(JMS)的概念及应用场景。 #### 十、面向服务体系(SOA) - **设计模式**:学习常用的设计模式,如工厂模式、策略模式等。 - **面向对象分析与设计**:掌握面向...
熟悉Java EE标准,包括JNDI、JMS、JTA/JTS、JMX等服务接口,以及使用Tomcat、Resin、JRun等Web容器部署Web应用,是成为一名合格的Java企业级开发者不可或缺的技能。 ### 八、XML与Web服务 学习XML相关API,如JAXP...
Java EE(Enterprise Edition)提供了许多企业级开发组件,如EJB(Enterprise JavaBeans)、JMS(Java Message Service)和JPA(Java Persistence API)。学习这些技术可以构建更复杂的应用,如分布式系统、消息队列...
### Kafka的学习要点详解 #### 一、Kafka简介 Kafka是一种高性能的分布式消息系统,提供了类似JMS的功能,但其设计与实现完全不同,并非遵循JMS规范。Kafka的核心特性在于其高度可靠的消息传递机制,能够处理大量...
Java企业版(Java EE)是用于开发企业级应用的平台,包括Servlet、JSP、EJB、JMS等技术,提供了Web服务器和应用服务器的开发框架。 以上只是Java基础知识的冰山一角,实际的学习过程中,还会涉及到网络编程、数据库...
Jini事件模型基于JavaBeans Activation Framework (JAF) 和Java Message Service (JMS),提供了高效且可靠的事件传递机制。 此外,Jini技术还支持分布式事务处理。通过使用Java Transaction API (JTA),Jini网络中...
7. **JMS与JTA**:讨论Java消息服务(JMS)和Java事务API(JTA),这些对于大型分布式系统中的异步通信和事务处理至关重要。 8. **Web服务**:可能涵盖SOAP和RESTful Web服务的创建,以及如何使用MyEclipse进行WSDL...
#### 九、XML与Web服务 1. **XML API**:如JAXP、JDOM、DOM4J、JAXB等,这些API提供了处理XML文档的能力。 2. **WebService开发**:熟悉JAX-RPC、SAAJ、JAXB、JAXM等技术,可以帮助开发者构建和消费Web服务。 ####...