`

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

    博客分类:
  • JMS
jms 
阅读更多
本文转自:http://blog.csdn.net/iamfafa/article/details/6265369

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.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.TemporaryQueue;
import javax.jms.TextMessage;

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
分享到:
评论

相关推荐

    深入掌握JMS.doc

    深入掌握JMS,详细讲解JMS原理及JMS开发

    深入掌握JMS——ActiveMQ 十一章

    深入掌握JMS——ActiveMQ 十一章pdf,收集整理

    深入掌握JMS深入掌握JMS

    在了解了JMS的基础上深入的了解它,有实例代码,可以加深你对它的理解。

    javax.jms-1.1.jar

    javax.jms-1.1.jar 一个jar包

    深入掌握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....

    深入掌握 JMS(java message service)

    一篇深入的讲解了java message service技术的文档 ,希望对大家有所帮助

    jms-1.1.jar

    jms-1.1.jar 解决maven 无法自动下载问题,手动放入仓库

    由浅入深学习、掌握JMS

    由浅入深学习、掌握JMS的几个教材,实用性强

    深入掌握J2EE编程技术

    《深入掌握J2EE编程技术》全面介绍了JSP层,EJB层和EIS层的设计思想与编程技术,涉及的内容包括:JDBC,JNDI,LDAP,Servlet,JSP,Taglib,EJB,J2EE,Connector,SAX与DOM,RMI,CORBA,JavaMail和JMS。...

    java8看不到源码-jms4s:jms的功能包装器

    在同一个本地事务中消费和发布 生产准备好了吗? 你问错了问题。 但是,是的,这是当前用于在大规模生产系统中每天处理数百万条消息的。 快速开始 要在具有 Scala 2.12 或更高版本的现有 SBT 项目中使用 jms4s,请...

    websphere MQ 所需jar包

    com.ibm.mq.commonservices-1.0、com.ibm.mq.defaultconfig-1.0、com.ibm.mq.headers-1.0.jar、com.ibm.mq.jmqi-1.0.jar、com.ibm.mq.soap-1.0.jar、com.ibm.mqjms-1.0.jar、jms-1.3.1_02.jar、providerutil-1.2.jar...

    JMS(JMS(JMS(JMS(

    JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS

    jms深入详解(说明介绍及源码)

    深入探索jms,包含JMS深入探究十篇.doc、amq Maven工程、apache-activemq-5.8.0 JMS Provider。从浅到深讲解了JMS接口的用法,并以activemq为实例进行实现。

    JMS : Java Message Service (Java消息服务)

    JMS : Java Message Service (Java消息服务)1 引言 1.1 编写目的 1.2 名词解释

    深入浅出JMS-JMS介绍说明文档

    深入浅出JMS,主要介绍J2EE中的一个重要规范JMS,因为这个规范在企业中的应用十分的广泛,也比较重要,我们主要介绍JMS的基本概念和它的模式,消息的消费以及JMS编程步骤。

    ActiveMQ.rar

    n 三:理解和掌握JMS 包括:基本概念、消息结构、可靠性机制、PTP、Pub/Sub、API结构、JMS应用开 发的基本步骤、持久和非持久的Topic等 n 四:用ActiveMQ构建应用 包括:多种启动Broker的方法、单独应用的开发、结合...

    JMS578多达13个固件打包升级工具包 可修改休眠时间

    两个固件升级工具 其中一个是量产工具可以修改休眠时间和盒子信息 TRIM检查工具 有几个固件版本为全网首发,别人没有的资源 固件列表: JMS578_00.01.00.05 JMS578_00.02.00.03 JMS578_00.02.00.09 JMS578_00.02....

    JMS 教程 - 消息队列、消息服务

    本教程描述了消息服务的概念和一些应用事例,说明了 JMS 的基本概念和结构,并就消息服务的发布/订阅、点对点模式编写了简单代码,最后讨论的JMS的一些高级问题,如食物、可靠性、可恢复性等。

Global site tag (gtag.js) - Google Analytics