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

JMS学习(十一)

阅读更多
    TemporaryQueue和TemporaryTopic,从字面上就可以看出它们是“临时”的目的地。可以通过Session来创建,例如:
    TemporaryQueue replyQueue = session.createTemporaryQueue();
   
    虽然它们是由Session来创建的,但是它们的生命周期确实整个Connection。如果在一个Connection上创建了两个Session,则一个Session创建的TemporaryQueue或TemporaryTopic也可以被另一个Session访问。那如果这两个Session是由不同的Connection创建,则一个Session创建的TemporaryQueue不可以被另一个Session访问。
    另外,它们的主要作用就是用来指定回复目的地, 即作为JMSReplyTo。
    在下面的例子中,先创建一个Connection,然后创建两个Session,其中一个Session创建了一个TemporaryQueue,另一个Session在这个TemporaryQueue上读取消息。
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;

public class TemporaryQueueTest {

    public static void main(String[] args) throws Exception {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
        Connection connection = factory.createConnection();
        connection.start();

        Queue queue = new ActiveMQQueue("testQueue2");
        final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //使用session创建一个TemporaryQueue。
        TemporaryQueue replyQueue = session.createTemporaryQueue();
      
        //接收消息,并回复到指定的Queue中(即replyQueue)
        MessageConsumer comsumer = session.createConsumer(queue);
        comsumer.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("Get Message: " + ((TextMessage)m).getText());
                    MessageProducer producer = session.createProducer(m.getJMSReplyTo());
                    producer.send(session.createTextMessage("ReplyMessage"));
                } catch (JMSException e) { }
            }
        });
      
        //使用同一个Connection创建另一个Session,来读取replyQueue上的消息。
        Session session2 = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        MessageConsumer replyComsumer = session2.createConsumer(replyQueue);
        replyComsumer.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("Get reply: " + ((TextMessage)m).getText());
                } catch (JMSException e) { }
            }
        });
      
        MessageProducer producer = session.createProducer(queue);
        TextMessage message = session.createTextMessage("SimpleMessage");
        message.setJMSReplyTo(replyQueue);
        producer.send(message);
    }
}

运行结果为:
Get Message: SimpleMessage
Get reply: ReplyMessage

如果将:
Session session2 = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
更改为:
Connection connection2 = factory.createConnection();
Session session2 = connection2.createSession(true, Session.AUTO_ACKNOWLEDGE);
就会得到类似于下面的异常:
Exception in thread "main" javax.jms.InvalidDestinationException: Cannot use a Temporary destination from another Connection。
分享到:
评论

相关推荐

    JBoss ESB 学习笔记

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

    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学习中的一点忠告

    熟悉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)。学习这些技术可以构建更复杂的应用,如分布式系统、消息队列...

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

    #### 十一、J2EE技术与企业级Java Beans 1. **JNDI**:Java Naming and Directory Interface (JNDI) 提供了查找和定位Java应用中的对象的方法。 2. **JMS**:Java Message Service (JMS) 是一个消息传递服务,用于...

    Delphi ActiveMQ 使用帮助

    - **示例源码**: 包含了一些示例项目,方便开发者学习和参考。 #### 六、支持的消息中间件 文档中提到了 HabariActiveMQClient 支持的消息中间件,特别是 Apache ActiveMQ。它还提供了一些配置 ActiveMQ 的基本...

    Java教程清华版.rar

    Java EE(以前称为J2EE)是一个用于开发分布式企业级应用的平台,包括Servlet、JSP、EJB、JMS、JPA等技术,提供了一套完整的解决方案。 通过这个【Java教程清华版】的学习,你将全面掌握Java编程的各项技能,为今后...

    java从入门到精通文档.rar

    Java Enterprise Edition(Java EE)是用于开发企业级应用的平台,包含Servlet、JSP、EJB、JMS、JPA等技术,用于构建分布式、事务处理、安全性高的应用程序。 十一、框架与工具 Spring、Hibernate、MyBatis等框架...

    Pro Spring Integration

    ### Pro Spring Integration 知识点概述 ...通过以上章节的学习,读者可以全面了解Spring Integration的功能及其在实际项目中的应用,并能够根据自己的需求选择合适的技术栈来实现高效的企业级集成解决方案。

    JavaEE面试常见问题及答案

    - 配置复杂度较高,对于初学者来说有一定的学习曲线。 #### 十一、J2EE常用设计模式之工厂模式 **工厂模式** 是一种常用的创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂方法让...

    java开发技术与工程实践

    包括Servlet、JSP、EJB、JMS等,是构建Web应用的基础。理解这些技术,可以开发出功能丰富、性能良好的服务器端应用。 以上内容涵盖了Java开发技术与工程实践的多个方面,通过深入学习和实践,可以提升Java开发者的...

    J2EE与.NET技术架构比较

    J2EE的核心组件包括Servlet、JSP、EJB、JMS、JNDI、JDBC和JCA等,强调多层分布式架构,支持企业级应用的复杂需求。 .NET Framework则由.NET类库、Common Language Runtime (CLR) 和 ASP.NET等构成,提供了统一的...

    ActiveMQ快速上手

    ### ActiveMQ快速上手知识点详解 #### 一、ActiveMQ简介 **1.1 定义与作用** - **定义**:ActiveMQ是...通过以上知识点的学习,可以全面了解ActiveMQ的各项特性和使用方法,有助于快速上手并应用于实际项目中。

    Java面试宝典2012版

    《Java面试宝典2012版》是针对Java开发者面试精心编纂的一份参考资料,...通过《Java面试宝典2012版》的学习,不仅可以系统复习Java基础知识,还能提升对技术面试的整体把握,为Java开发者在求职路上提供有力的支持。

    Java.Web应用开发.J2EE和Tomcat第2版

    通过学习《Java.Web应用开发.J2EE和Tomcat第2版》,开发者可以掌握从基本的Web页面开发到复杂的企业级应用系统构建的全面技能,了解J2EE规范和Tomcat服务器的结合使用,为实际工作中的Java Web项目提供坚实的理论和...

    weblogic 管理指南

    在这里,管理员可以创建、配置和管理应用程序、数据源、JMS队列、安全策略等。控制台提供直观的图形界面,使得管理任务变得简单易行。 四、部署应用程序 WebLogic Server支持多种方式部署应用程序,包括使用管理...

    JMeter-Tutorial.pdf

    #### 十一、数据库测试计划教程 - **配置 JDBC 连接**: 设置数据库驱动、URL、用户名和密码。 - **编写 SQL 查询**: 创建 JDBC 请求采样器并编写 SQL 查询。 - **添加断言**: 验证返回的数据。 - **执行测试**: 运行...

    JavaPrac

    如果JavaPrac涉及Web开发,那么Java EE(企业版)的知识必不可少,包括Servlet、JSP、JDBC数据库连接、EJB、JMS消息队列等。 十一、Spring框架 Spring是Java开发中的一个流行框架,它简化了依赖注入、AOP(面向切面...

Global site tag (gtag.js) - Google Analytics