`

深入掌握JMS(十一):TemporaryQueue和TemporaryTopic

阅读更多

        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

    总结,`javax.jms-1.1.jar`是Java消息服务API的实现,它提供了在分布式系统中进行可靠、异步通信的能力,通过标准化接口和消息模型,使得开发者可以轻松地在不同消息中间件之间切换,提升了系统的灵活性和可扩展性。

    深入掌握 JMS(java message service)

    ### 深入掌握 JMS(Java Message Service) #### JMS 基础概念 - **JMS**(Java Message Service)是一种Java平台中的消息中间件技术标准,它定义了一套标准API,用于应用程序之间的消息传递。JMS的出现极大地简化...

    jms-1.1.jar

    《JMS 1.1.jar:Java消息服务与Maven的深度解析》 在Java开发领域,消息服务(Java Message Service,简称JMS)扮演着至关重要的角色,它为...理解和掌握JMS原理及操作,对于提升Java应用的稳定性和扩展性至关重要。

    深入掌握JMS-ActiveMQ

    JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业应用的开发。本资源为chm格式,深入介绍了ActiveMQ的应用。

    javax.jms.jar

    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.7z

    内含javax.jms-1.1.jar 安装包下载以及Maven手动安装命令 Maven官方仓库下载不下来资源,只能手动安装 &lt;!-- https://mvnrepository.com/artifact/javax.jms/jms --&gt; &lt;groupId&gt;javax.jms &lt;artifactId&gt;jms ...

    由浅入深学习、掌握JMS

    本系列教材旨在帮助读者从基础到深入地理解和掌握JMS的核心概念与实践。 首先,**《利用JMS建立消息传递系统》** 这份文档会介绍如何使用JMS来构建一个消息传递系统的基本步骤。这包括创建消息生产者、消费者,以及...

    OSB中JMS配置及队列使用说明

    OSB 中 JMS 配置及队列使用说明 OSB(Oracle Service Bus)是一种基于 Java 的集成平台,旨在...本文详细介绍了 OSB 中 JMS 配置及队列使用的步骤,旨在帮助读者更好地理解和掌握 OSB 中 JMS 配置及队列使用的技术。

    Weblogic环境下JMS配置

    接下来,我们将深入探讨在WebLogic环境下配置JMS的关键步骤和相关知识点。 首先,我们需要理解JMS的基本概念。JMS提供了一种方式,使得应用程序能够发送和接收消息,而无需知道消息接收者的具体状态。它支持两种...

    JBOSS建立JMS应用实例

    【JBOSST建立JMS应用实例】 JBOSST(Java Business Open Source Solutions)是一个开源的企业级应用服务器,它提供了全面的中间件服务,包括对Java...同时,提供的文档和项目文件为深入理解和实践提供了丰富的资源。

    Weblogic JMS 依赖jar包下载

    6. **编写生产者和消费者代码**:使用JMS API(如`javax.jms.Connection`,`Session`,`MessageProducer`,`MessageConsumer`等)来创建和发送消息,以及接收和处理消息。 在描述中提到的jar包下载,通常包括以下...

    ActiveMQ在JMS中的运用-深入浅出JMS

    在压缩包文件“wsheng-jms”中,可能包含了使用ActiveMQ和JMS的示例代码或教程,通过学习这些资源,你可以更深入地了解如何在实际项目中使用这些技术。 总结来说,JMS和ActiveMQ为分布式系统提供了一种健壮的消息...

    javax.jms包,sun的JMS接口规范包

    8. **TemporaryQueue**和**TemporaryTopic**:用于创建临时的队列和主题,这些临时实体在创建它们的Connection断开后会被自动删除。 9. **Transaction Management**:JMS允许在Session上进行事务管理,确保消息的...

    深入掌握J2EE编程技术.rar

    《深入掌握J2EE编程技术》是一本专为Java企业级开发人员精心编写的指南,旨在帮助读者全面理解和精通J2EE(Java Platform, Enterprise Edition)的各项核心技术。免积分下载的特点使得更多的开发者能够轻松获取这份...

    jms中间件设计源代码下载.zip

    JMS(Java Message Service)是Java平台中用于创建和管理异步消息的标准API,它允许应用程序之间通过消息传递...通过深入研究这些内容,你不仅可以掌握JMS的基本概念,还能了解到如何在实际环境中部署和管理JMS系统。

    JMS学习笔记精心总结

    总的来说,JMS是构建高可用、分布式系统的重要工具,理解和掌握JMS对于提升Java开发者在企业级应用开发中的能力至关重要。通过深入学习和实践,我们可以更好地利用JMS来解决复杂系统的异步通信问题。

    jms1.1.jar.zip

    《JMS 1.1 API详解与应用实践》 Java消息服务(Java Message Service,简称JMS)是Java平台中用于在分布式环境中传递消息的标准API...对于开发者来说,理解和掌握JMS 1.1及其应用是提升Java分布式系统设计能力的关键。

Global site tag (gtag.js) - Google Analytics