`
jibin6693923
  • 浏览: 13752 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

JMS学习(九)

阅读更多
    前面的例子中创建一个消息消费者使用的是:
          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相关的硕士学位论文的研究方向及主要内容。JMS(Java Message ...通过对这些论文的学习和研究,可以全面了解JMS技术的最新发展动态及其在企业级应用中的重要作用。

    JMS简明教程--简体中文

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的API...通过阅读"JMS简明教程.pdf",你可以进一步深化对JMS的理解,同时"中国java下载站.url"可能是获取更多Java资源和学习资料的链接。

    weblogic 学习资料大全

    WebLogic的主要功能包括:应用服务器、JMS消息队列、数据源管理、集群支持、安全管理、监控和诊断工具等。 二、WebLogic安装与配置 学习资料中可能包含WebLogic的安装步骤,包括下载、安装、配置环境变量等。配置...

    ActiveMQ学习笔记之九--发送消息到队列中

    这篇"ActiveMQ学习笔记之九--发送消息到队列中"主要探讨的是如何通过编程方式向ActiveMQ队列发送消息,这对于理解和应用消息中间件至关重要。 首先,我们要理解ActiveMQ中的队列(Queue)概念。队列是一种先进先出...

    JBOSS_Esb学习资料

    7. **JMS路由**:《JBoss_ESB学习笔记9——第八个ESB应用JMS_Router.doc》和《JBoss_ESB学习笔记10——第九个ESB应用JMS_Topic.doc》涉及到了JMS(Java Message Service)在ESB中的应用,讲解了如何利用ESB进行消息...

    JBoss ESB 学习笔记

    - **重点**:学习如何使用JMS Router组件实现消息路由。 - **实现**:配置JMS Router,使其能够根据规则将消息路由到不同的目的地。 #### 十、第九个ESB应用JMS Topic - **重点**:使用JMS Topic组件实现发布订阅...

    J2EE学习课件(ppt)

    九、JAF(JavaBeans Activation Framework) JAF允许程序处理未知的数据类型,如电子邮件附件,通过MIME类型识别和激活。 十、JMS(Java Message Service) JMS是Java的消息中间件标准,用于异步消息传递和解耦应用...

    tibco学习资料,大全

    本压缩包是Tibco学习的宝贵资源,包含了九份PDF文档以及相关的Java包,适用于Java和C#开发者。以下是这些资源的详细解读: 1. **tibjms.jar和jms.jar**: 这两个是Java消息服务(JMS)的实现库。tibjms.jar是Tibco...

    Java术语详解(JMS、RPC、Ajax、SOAP、WSDL、JPA、ORM、mvc和JNDI)

    下面将详细解释标题和描述中提及的九个关键术语。 1. **JMS(Java Message Service)** JMS是Java平台中用于在分布式环境中进行异步消息传递的标准API。它允许应用程序创建、发送、接收和读取消息,提供了消息队列...

    JSP学习电子PPT,非常细

    JSP提供了九个内置对象,如`request`、`response`、`session`、`application`等,它们对应于Servlet API中的请求、响应、会话和应用范围的对象,可以直接在JSP页面中使用,无需额外的实例化。 **6. JSP最佳实践** -...

    java的30个学习目标

    熟悉JNDI、JMS、JTA/JTS、JMX、JavaMail等J2EE技术,对于构建企业级应用和服务至关重要。 #### 十四、企业级JavaBeans(EJB) 最后,深入理解EJB(Stateless/Stateful Session Bean、Message-Driven Bean)的组件模式...

    Java学习的30个目标.txt

    - **JMS**:掌握Java Message Service,学会使用JMS进行消息传递。 - **JTA/JTS**:了解Java Transaction API/Java Transaction Service,学会使用JTA进行事务管理。 - **JMX**:掌握Java Management Extensions,...

    java方向上要学习的知识

    - **JTA/JMS**:理解Java事务服务(JTA)与Java消息服务(JMS)的概念及应用场景。 #### 十、面向服务体系(SOA) - **设计模式**:学习常用的设计模式,如工厂模式、策略模式等。 - **面向对象分析与设计**:掌握面向...

    java学习中的一点忠告

    熟悉Java EE标准,包括JNDI、JMS、JTA/JTS、JMX等服务接口,以及使用Tomcat、Resin、JRun等Web容器部署Web应用,是成为一名合格的Java企业级开发者不可或缺的技能。 ### 八、XML与Web服务 学习XML相关API,如JAXP...

    java后端学习笔记.zip

    Java EE(Enterprise Edition)提供了许多企业级开发组件,如EJB(Enterprise JavaBeans)、JMS(Java Message Service)和JPA(Java Persistence API)。学习这些技术可以构建更复杂的应用,如分布式系统、消息队列...

    kafka的学习

    ### Kafka的学习要点详解 #### 一、Kafka简介 Kafka是一种高性能的分布式消息系统,提供了类似JMS的功能,但其设计与实现完全不同,并非遵循JMS规范。Kafka的核心特性在于其高度可靠的消息传递机制,能够处理大量...

    javabase达内java零基础学习教案.ppt

    Java企业版(Java EE)是用于开发企业级应用的平台,包括Servlet、JSP、EJB、JMS等技术,提供了Web服务器和应用服务器的开发框架。 以上只是Java基础知识的冰山一角,实际的学习过程中,还会涉及到网络编程、数据库...

    《JINI核心技术》前九章(太大了,所以分两次上传!)

    Jini事件模型基于JavaBeans Activation Framework (JAF) 和Java Message Service (JMS),提供了高效且可靠的事件传递机制。 此外,Jini技术还支持分布式事务处理。通过使用Java Transaction API (JTA),Jini网络中...

    MyEclipse 6 Java EE 开发中文手册-更新到第九章

    7. **JMS与JTA**:讨论Java消息服务(JMS)和Java事务API(JTA),这些对于大型分布式系统中的异步通信和事务处理至关重要。 8. **Web服务**:可能涵盖SOAP和RESTful Web服务的创建,以及如何使用MyEclipse进行WSDL...

    JAVA程序员您需要学习的25个标准

    #### 九、XML与Web服务 1. **XML API**:如JAXP、JDOM、DOM4J、JAXB等,这些API提供了处理XML文档的能力。 2. **WebService开发**:熟悉JAX-RPC、SAAJ、JAXB、JAXM等技术,可以帮助开发者构建和消费Web服务。 ####...

Global site tag (gtag.js) - Google Analytics