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

JMS学习(十)

阅读更多
    前面讲过JMSCorrelationID主要是用来关联多个Message,例如需要回复一个消息的时候,通常把回复的消息的JMSCorrelationID设置为原来消息的ID。在下面这个例子中,创建了三个消息生产者A,B,C和三个消息消费者A,B,C。生产者A给消费者A发送一个消息,同时需要消费者A给它回复一个消息。B、C与A类似。
    简图如下:
       生产者A-----发送----〉消费者A-----回复------〉生产者A
        生产者B-----发送----〉消费者B-----回复------〉生产者B
        生产者C-----发送----〉消费者C-----回复------〉生产者C
  
    需要注意的是,所有的发送和回复都使用同一个Queue,通过Selector区分。

import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;

public class JMSCorrelationIDTest {
  
    private Queue queue;
    private Session session;
  
    public JMSCorrelationIDTest() throws JMSException{
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
        Connection connection = factory.createConnection();
        connection.start();
  
        queue = new ActiveMQQueue("testQueue");
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
      
        setupConsumer("ConsumerA");
        setupConsumer("ConsumerB");
        setupConsumer("ConsumerC");
      
        setupProducer("ProducerA", "ConsumerA");
        setupProducer("ProducerB", "ConsumerB");
        setupProducer("ProducerC", "ConsumerC");
    }
  
    private void setupConsumer(final String name) throws JMSException {
        //创建一个消费者,它只接受属于它自己的消息
        MessageConsumer consumer = session.createConsumer(queue, "receiver='" + name + "'");
        consumer.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    MessageProducer producer = session.createProducer(queue);
                    System.out.println(name + " get:" + ((TextMessage)m).getText());
                    //回复一个消息
                    Message replyMessage = session.createTextMessage("Reply from " + name);
                    //设置JMSCorrelationID为刚才收到的消息的ID
                    replyMessage.setJMSCorrelationID(m.getJMSMessageID());
                    producer.send(replyMessage);
                } catch (JMSException e) { }
            }
        });
    }

    private void setupProducer(final String name, String consumerName) throws JMSException {
        MessageProducer producer = session.createProducer(queue);
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        //创建一个消息,并设置一个属性receiver,为消费者的名字。
        Message message = session.createTextMessage("Message from " + name);
        message.setStringProperty("receiver", consumerName);
        producer.send(message);
      
        //等待回复的消息
        MessageConsumer replyConsumer = session.createConsumer(queue, "JMSCorrelationID='" + message.getJMSMessageID() + "'");
        replyConsumer.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println(name + " get reply:" + ((TextMessage)m).getText());
                } catch (JMSException e) { }
            }
        });
    }
  
    public static void main(String[] args) throws Exception {
        new JMSCorrelationIDTest ();
    }
}

运行结果为:
ConsumerA get:Message from ProducerA
ProducerA get reply:Reply from ConsumerA
ConsumerB get:Message from ProducerB
ProducerB get reply:Reply from ConsumerB
ConsumerC get:Message from ProducerC
ProducerC get reply:Reply from ConsumerC
分享到:
评论

相关推荐

    JMS优秀硕士学位论文-目录

    根据提供的文件信息,我们可以梳理出一系列与JMS相关的硕士学位论文的研究方向及主要内容。JMS(Java Message ...通过对这些论文的学习和研究,可以全面了解JMS技术的最新发展动态及其在企业级应用中的重要作用。

    ActiveMq-JMS简单实例使用tomcat.pdf

    同时,ActiveMQ具备良好的Spring框架支持,运行速度快,性能比JBossMQ高出十倍,并且有Apache社区的强大支持,这意味着它拥有持续发展的潜力。 下载和安装ActiveMQ非常简单,可以从官方网站...

    JBOSS_Esb学习资料

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

    weblogic 学习资料大全

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

    JBoss ESB 学习笔记

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

    jee、spring、spring mvc、mybatis 学习(十)

    在本篇博客“JEE、Spring、Spring MVC、MyBatis 学习(十)”中,作者深入探讨了这四个关键的Java企业级开发技术,它们是构建现代Web应用程序的基础。下面将对这些技术进行详细阐述。 1. JEE(Java Enterprise ...

    J2EE学习课件(ppt)

    十、JMS(Java Message Service) JMS是Java的消息中间件标准,用于异步消息传递和解耦应用程序。 通过这个J2EE学习课件,学习者可以系统地了解并掌握这些核心概念,逐步提升在企业级应用开发中的技能。深入学习...

    JMS-infrastructure-for-Mobile-Ops

    - 通过阅读源代码和文档,可以学习到如何配置JMS连接、创建生产者和消费者、处理不同类型的JMS消息等。 总结,JMS在移动运营商的基础设施中扮演了关键角色,它提供了高效、可靠的消息传递机制,以支持各种业务操作...

    java的30个学习目标

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

    weblogic视频教程

    WebLogic是Oracle公司的一款...通过这十个部分的学习,无论你是初入Java世界还是已有一定经验的开发者,都能从这套"WebLogic视频教程"中收获丰富的知识,提升自己的技能水平,为成为专业的Java EE开发者奠定坚实基础。

    Java学习的30个目标.txt

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

    java的三十个目标

    以下是对标题“java的三十个目标”中所提及的一些主要学习目标的详细解释: 1. **面向对象编程**:理解 OOA/OOD(面向对象分析与设计),熟悉设计模式,如 GOF 模式和 J2EE 设计模式,以及 UML(统一建模语言)的...

    我的j2ee成功之路源码第十一章

    【标题】"我的j2EE成功之路源码第十一章"揭示了作者在学习和实践j2EE技术过程中积累的宝贵经验。j2EE(Java 2 Platform, Enterprise Edition),是Oracle公司推出的用于构建企业级分布式应用的Java平台。本章节的...

    java学习中的一点忠告

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

    java方向上要学习的知识

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

    java web 课程学习记录

    5. **Java EE组件**:包括JNDI(Java Naming and Directory Interface)用于服务查找,EJB(Enterprise JavaBeans)用于构建可部署的服务器端组件,JMS(Java Message Service)用于异步通信,以及JTA(Java ...

    java后端学习笔记.zip

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

    JAVA WEB开发源码

    20. **第二十章:JMS消息队列** - 通过Java Message Service(JMS)进行消息传递,实现应用间的解耦。 21. **第二十一章:缓存技术** - 如何使用Ehcache、Redis等缓存技术提高Web应用性能。 22. **第二十二章:...

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

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

    ActiveMQ学习教程PPT

    自己做的一个MQ-PPT,通过学习,应用之后的总结,理论和实践,例子都做了一一说明,希望对初学者有所帮助。

Global site tag (gtag.js) - Google Analytics