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上读取消息。
package com.bijian.study; 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("tcp://localhost:61616"); Connection connection = factory.createConnection(); connection.start(); Queue queue = new ActiveMQQueue("testQueue2"); final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 接收消息,并回复到指定的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) { } } }); // 使用session创建一个TemporaryQueue。 TemporaryQueue replyQueue = session.createTemporaryQueue(); // 使用同一个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 at org.apache.activemq.ActiveMQMessageConsumer.<init>(ActiveMQMessageConsumer.java:197) at org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:1303) at org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:1247) at org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:1159) at org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:1131) at com.bijian.study.TemporaryQueueTest.main(TemporaryQueueTest.java:37)
PS:ActiveMQ Connection方法:createSession(boolean transacted, int acknowledgeMode);其中transacted为使用事务标识,acknowledgeMode为签收模式。
文章来源:http://www.cnblogs.com/guthing/archive/2010/06/12/1757187.html
相关推荐
总结,`javax.jms-1.1.jar`是Java消息服务API的实现,它提供了在分布式系统中进行可靠、异步通信的能力,通过标准化接口和消息模型,使得开发者可以轻松地在不同消息中间件之间切换,提升了系统的灵活性和可扩展性。
### 深入掌握 JMS(Java Message Service) #### JMS 基础概念 - **JMS**(Java Message Service)是一种Java平台中的消息中间件技术标准,它定义了一套标准API,用于应用程序之间的消息传递。JMS的出现极大地简化...
《JMS 1.1.jar:Java消息服务与Maven的深度解析》 在Java开发领域,消息服务(Java Message Service,简称JMS)扮演着至关重要的角色,它为...理解和掌握JMS原理及操作,对于提升Java应用的稳定性和扩展性至关重要。
JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业应用的开发。本资源为chm格式,深入介绍了ActiveMQ的应用。
javax.jms.TemporaryQueue.class javax.jms.TemporaryTopic.class javax.jms.ServerSession.class javax.jms.ConnectionFactory.class javax.jms.MessageNotReadableException.class javax.jms....
内含javax.jms-1.1.jar 安装包下载以及Maven手动安装命令 Maven官方仓库下载不下来资源,只能手动安装 <!-- https://mvnrepository.com/artifact/javax.jms/jms --> <groupId>javax.jms <artifactId>jms ...
本系列教材旨在帮助读者从基础到深入地理解和掌握JMS的核心概念与实践。 首先,**《利用JMS建立消息传递系统》** 这份文档会介绍如何使用JMS来构建一个消息传递系统的基本步骤。这包括创建消息生产者、消费者,以及...
OSB 中 JMS 配置及队列使用说明 OSB(Oracle Service Bus)是一种基于 Java 的集成平台,旨在...本文详细介绍了 OSB 中 JMS 配置及队列使用的步骤,旨在帮助读者更好地理解和掌握 OSB 中 JMS 配置及队列使用的技术。
接下来,我们将深入探讨在WebLogic环境下配置JMS的关键步骤和相关知识点。 首先,我们需要理解JMS的基本概念。JMS提供了一种方式,使得应用程序能够发送和接收消息,而无需知道消息接收者的具体状态。它支持两种...
【JBOSST建立JMS应用实例】 JBOSST(Java Business Open Source Solutions)是一个开源的企业级应用服务器,它提供了全面的中间件服务,包括对Java...同时,提供的文档和项目文件为深入理解和实践提供了丰富的资源。
6. **编写生产者和消费者代码**:使用JMS API(如`javax.jms.Connection`,`Session`,`MessageProducer`,`MessageConsumer`等)来创建和发送消息,以及接收和处理消息。 在描述中提到的jar包下载,通常包括以下...
在压缩包文件“wsheng-jms”中,可能包含了使用ActiveMQ和JMS的示例代码或教程,通过学习这些资源,你可以更深入地了解如何在实际项目中使用这些技术。 总结来说,JMS和ActiveMQ为分布式系统提供了一种健壮的消息...
8. **TemporaryQueue**和**TemporaryTopic**:用于创建临时的队列和主题,这些临时实体在创建它们的Connection断开后会被自动删除。 9. **Transaction Management**:JMS允许在Session上进行事务管理,确保消息的...
《深入掌握J2EE编程技术》是一本专为Java企业级开发人员精心编写的指南,旨在帮助读者全面理解和精通J2EE(Java Platform, Enterprise Edition)的各项核心技术。免积分下载的特点使得更多的开发者能够轻松获取这份...
JMS(Java Message Service)是Java平台中用于创建和管理异步消息的标准API,它允许应用程序之间通过消息传递...通过深入研究这些内容,你不仅可以掌握JMS的基本概念,还能了解到如何在实际环境中部署和管理JMS系统。
总的来说,JMS是构建高可用、分布式系统的重要工具,理解和掌握JMS对于提升Java开发者在企业级应用开发中的能力至关重要。通过深入学习和实践,我们可以更好地利用JMS来解决复杂系统的异步通信问题。
《JMS 1.1 API详解与应用实践》 Java消息服务(Java Message Service,简称JMS)是Java平台中用于在分布式环境中传递消息的标准API...对于开发者来说,理解和掌握JMS 1.1及其应用是提升Java分布式系统设计能力的关键。