- 浏览: 43000 次
- 性别:
- 来自: 深圳
最新评论
-
liguirong98:
真的没有了?
4.3通过网络连接ActiveMQ(一) -
a2623567z:
请问高手,后面还有吗。我真的想知道。如果一台机要连接到另外一台 ...
4.3通过网络连接ActiveMQ(一) -
maishj:
怎么没继续了啊
4.3通过网络连接ActiveMQ(一) -
JFires:
<div class="quote_title ...
2.4JMS规范(五) -
1927105:
请问LZ这图是用什么软件画出来,感觉效果不错。
2.4JMS规范(五)
2.5使用JMS API创建JMS应用
因不同的商业要求,创建一个JMS应用可以很简单也可以很复杂。就像JDBC,JNDI,EJBs等API,抽象JMS API,使得JMS代码和商业逻辑相分离是必须的。这个概念不会在这里讨论,因为这要涉及到模式和应用架构,不是一两句话可以说完的。下面是一些简单的例子,它们向你展示了一个最基本的JMS APIs的使用,
2.5.1 一个简单的JMS应用
一个JMS应用使用Java语言编写的,它组合了各个部分来和JMS一起工作。这些部分在2.3节已经讨论过。一个简单的JMS应用会下面的步骤:
- 请求一个JMS连接工i厂。
- 是用连接工厂创建连接。
- 启动JMS连接。
- 通过连接创建session。
- 获取一个目标。
- 创建一个生产者,或a.创建一个生产者,b.创建一条JMS消息并发送到目标
- 创建一个消费者,或a.创建一个消费者,b.注册一个消息监听器。
- 发送或接受消息。
- 关闭所有资源(连接,会话,生产者,消费者等)。
这些步骤是用来展示使用JMS的一个简单流程。下面的列表用来展现创建一个生产者并发送消息的代码。
Listing 2.8 Sending a JMS message
public class MyMessageProducer {
...
ConnectionFactory connectionFactory;
Connection connection;
Session session;
Destination destination;
MessageProducer producer;
Message message;
boolean useTransaction = false;
try {
Context ctx = new InitialContext();
connectionFactory =
(ConnectionFactory) ctx.lookup("ConnectionFactoryName");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(useTransaction,
Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("TEST.QUEUE");
producer = session.createProducer(destination);
message = session.createTextMessage("this is a test");
producer.send(message);
} catch (JMSException jmsEx) {
...
} finally {
producer.close();
session.close();
connection.close();
}
}
列表2.8,首先创建了一个上下文。通常情况下,上下文是通过JNDI路径获取的,这个例子只是用来演示的。在初始化的上下文中通过使用连接工厂的唯一名字获取它。通过连接工厂,JMS连接被创建和启动。这之后,JMS客户端可以开始和代理器交互了。通过JMS连接,JMS会话被创建并且使用自动答复消息类型。JMS队列通过会话被创建。接下来是使用会话和目标创建生产者。之后通过会话创建了一条简单的文本消息并由生产者发送出去。最后的一个步骤是关闭所有用到的对象。
2.8的例子演示了一个最简单的创建生产者和发送一条消息到目标的动作。注意,有没有一个消费者在等待这样一条消息对于生产者是不重要的。MOMs作用就是生产者和消费者的一个中间调节,这对于创建JMS应用非常有帮助。开发者并不需要考虑如何获取这样的中间调节功能,JMS APIs已经提供了。下面的例子则是演示一个创建消费者和接收消息的动作。
Listing 2.9 Receiving a JMS message synchronously
public class MySyncMessageConsumer {
...
ConnectionFactory connectionFactory;
Connection connection;
Session session;
Destination destination;
MessageConsumer consumer;
Message message;
boolean useTransaction = false;
try {
Context ctx = new InitialContext();
connectionFactory =
(ConnectionFactory) ctx.lookup("ConnectionFactoryName");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(useTransaction,
Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("TEST.QUEUE");
consumer = session.createConsumer(destination);
message = (TextMessage) consumer.receive(1000);
System.out.println("Received message: " + message);
} catch (JMSException jmsEx) {
...
} finally {
producer.close();
session.close();
connection.close();
}
}
2.9的例子和2.8很像,因为它们都需要相同的步骤直到消费者被创建。之后,消费者被用来从目标接受消息。最后一部分代码是关闭所有的对象。同样地,这并不要求现在有一个生产者在发送消息。所有的中间和临时存储都是JMS提供者做的。2.9演示的是同步的消息接收。这意味着JMS消费者发送一个请求到JMS提供者,并等待响应。消费者必须通过循环一次次地获取消息。JMS消费者并非只能通过同步方法获取消息。
JMS API同样提供了异步获取消息的方法。JMS提供者会将消息推送到消费者。下面是一个异步消息消费的例子。
Listing 2.10 Receiving a JMS message asynchronously
public class MyAsyncMessageConsumer implements MessageListener {
...
ConnectionFactory connectionFactory;
Connection connection;
Session session;
Destination destination;
MessageProducer producer;
Message message;
boolean useTransaction = false;
try {
Context ctx = new InitialContext();
connectionFactory =
(ConnectionFactory) ctx.lookup("ConnectionFactoryName");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(useTransaction,
Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("TEST.QUEUE");
consumer = session.createConsumer(destination);
consumer.setMessageListener(this);
} catch (JMSException jmsEx) {
...
} finally {
producer.close();
session.close();
connection.close();
}
public void onMessage(Message message) {
if (message instanceof TextMessage) {
System.out.println("Received message: " + message);
}
}
}
2.10的不同之处在于它实现了MessageListener接口的onMessage方法并且将实现类注册到JMS提供者。异步消息接收是很有用的。这意味着消费者不再需要人工地不停地从提供者那里拉消息。而是,通过注册到提供者的MessageListener实现作为回调,onMessage方法将在消息被投递的时候自动调用。
JMS多线程应用
JMS定义了很多并发的对象,但是只有一部分支持并发访问。ConnectionFactory,Connection,Destination对象支持并发访问;Session,MessageProducer,MessageConsumer对象不支持并发访问。也就是说,Session,MessageProducer,MessageConsumer对象不应该在多线程中共享
对于JMS API消息消费还有一点要说明。它提供异步的消息消费,这和EJB的消息驱动bean(message-driven beans)一样。
发表评论
-
4.3通过网络连接ActiveMQ(一)
2011-11-11 15:19 28114.3通过网络连接ActiveMQ ... -
4.2传输连接器
2011-10-29 09:54 14394.2传输连接器 为了交 ... -
4.1理解连接器URIs
2011-10-27 14:10 1362第二部分:配置标准Acti ... -
3.3用例二:工作队列
2011-10-26 16:21 16593.3用例二:工作队列 第二个例子通过工作队列来演示点对 ... -
3.2用例一:股票投资例子
2011-10-26 09:06 19283.2用例一:股票投资例 ... -
3.1下载maven并编译示例
2011-10-24 20:46 1609第三章:ActiveMQ例子 ... -
2.5使用JMS API创建JMS应用(二)
2011-10-23 18:40 15352.5.2 消息驱动beans 消息驱动beans(Me ... -
2.4JMS规范(五)
2011-10-21 09:17 21822.4.7 JMS领域 就 ... -
2.4JMS规范(四)
2011-10-20 09:14 17162.4.6消息选择器 很多时候,一个JMS客户端 ... -
2.4JMS规范(三)
2011-10-19 08:43 1404JMS提供者可选头部 JMSRedelivered-- ... -
2.4JMS规范(二)
2011-10-18 09:04 20332.4.5 JMS消息内部 ... -
2.4JMS规范(一)
2011-10-16 21:31 18402.4 JMS规范 就像前面提到的,JMS规范定 ... -
2.3什么是Java消息服务
2011-10-14 08:45 17672.3什么是Java消息服务 JMS是在MOM供 ... -
2.2什么是面向消息中间件
2011-10-14 07:51 26682.2什么是面向消息中间件 面向消息中间件( ... -
2.1介绍企业消息应用
2011-10-13 09:17 1475第二章 理解面向消 ... -
1.4运行ActiveMQ第一个例子
2011-10-12 20:07 24541.4运行ActiveMQ第一个例 ... -
1.3开始使用ActiveMQ
2011-10-11 07:56 3497开始使用ActiveMQ 开始使用ActiveM ... -
1.2为什么,何时使用ActiveMQ
2011-10-10 14:45 44911.2使用ActiveMQ:为什么,何时 时间回 ... -
1.1ActiveMQ 特性
2011-10-09 16:18 3517...
相关推荐
"xcf2.5使用包"指的是Apache CXF的2.5版本,这是一个广泛使用的Java框架,用于创建、消费和管理Web服务。此包包含了CXF框架的所有组件和相关依赖,方便开发者在项目中集成和使用。 Apache CXF 2.5.11是该系列的一个...
JMS规范定义了与平台无关的API,这使得开发者可以编写一次代码,然后在任何支持JMS的平台上运行。这意味着JMS客户端程序能够轻松地在不同的操作系统和硬件架构之间迁移,只需确保目标环境有相应的JMS提供者即可。 *...
- **共同特性与可移植性:** JMS专注于定义一组普遍适用的企业消息概念和工具,努力减少Java程序员在使用不同企业消息产品时需要掌握的概念数量,并最大化消息应用的可移植性。 **1.2.4 JMS不包含什么** - **明确...
JMS(Java Message Service)是一种Java API,用于在两个应用程序之间异步地发送消息。Spring框架提供了对JMS的支持,允许开发者使用JMS template或message listener container来实现消息的发送和接收。本文主要讲述...
这些库的组合意味着这个压缩包旨在支持一个使用Spring 2.5的Java项目,提供了从对象管理、上下文环境到日志记录和元数据处理的全面支持。在实际开发中,开发者会将这些库加入到项目的类路径中,以便利用Spring框架的...
JMS,即Java消息服务,是Java平台中的消息中间件规范,它允许应用程序创建、发送、接收和读取消息,从而在两台或多台计算机之间进行异步通信。JMS提供了点对点(Point-to-Point,P2P)和发布/订阅(Publish/...
在《Spring 2.5 开发手册》中,会详细解释这些特性的使用方法、配置细节以及最佳实践,帮助开发者充分利用Spring框架,构建稳定、高效的应用系统。通过阅读这份手册,开发者可以深入理解Spring 2.5的工作原理,提升...
Spring 2.5 是一个重要的Java应用程序框架,它在企业级开发中被广泛使用,特别是在构建基于Java的可重用、模块化和松散耦合的组件方面。这个"SPRING2.5_JAR"压缩包包含的是Spring框架2.5版本的核心库,允许开发者...
Spring Framework 2.5 是一款功能强大的企业级 Java 开发框架,旨在简化应用程序的开发过程,提高开发效率,并提供高度灵活的设计模式支持。该版本进一步增强了 Spring 的核心特性,并新增了许多功能来满足日益增长...
Java消息服务(Java Message Service,简称JMS)是Java平台中用于创建应用程序之间异步通信的标准API。它允许应用程序通过发送和接收消息来解耦生产者和消费者,提高系统的可扩展性和可靠性。Apache ActiveMQ是JMS的...
4. **JavaEE5规范**是Java企业级应用平台的一个版本,它引入了大量的新特性和改进,比如对JSF(JavaServer Faces)、JPA(Java Persistence API)、JMS(Java Message Service)和 annotations 的支持,极大地简化了...
这三个框架的集成使用可以创建一个高效、可维护的Java EE应用。Struts2负责控制流程,Spring处理依赖注入和事务管理,而Hibernate则作为数据层的接口,负责与数据库的交互。这种组合可以提供良好的分层架构,提高...
J2EE(Java 2 Platform, Enterprise Edition)是Java平台上用于构建企业级应用的框架,它提供了一系列的接口、类库和服务来支持开发分布式、多层的企业应用程序。J2EE 1.6版本是在2009年发布的一个重要的更新,它在...
**JAVA EE 5 API**是Java企业版(Enterprise Edition)5的一个重要组成部分,它提供了用于构建分布式、基于Web的企业级应用程序的接口和类库。这个API涵盖了多种技术规范,包括Servlet、JSP、EJB、JMS、JTA、JPA等,...
在这个“javaee5-doc-api”压缩包中,包含的是Java EE 5的官方API文档,对于开发者来说是一份非常重要的参考资料。 **1. Servlet API** Servlet是Java EE中处理HTTP请求的核心组件。在Java EE 5中,Servlet API升级...
Spring 2.5版本是该框架的一个重大更新,引入了一系列新特性和改进,进一步提升了开发效率和应用程序的性能。本文将基于《Spring Framework-Reference Documentation Version 2.5》文档,深入剖析Spring 2.5的核心...
- **JmsTemplate**:Spring 提供了一个名为 `JmsTemplate` 的类,该类封装了 JMS API 的复杂性,简化了消息的发送和接收。通过 `JmsTemplate`,开发者可以很容易地实现消息发送逻辑。 - **消息监听器**:Spring 还...
JMS为消息的创建、发送、接收和读取提供了统一的接口,使得开发者能够在不同的消息中间件之间进行切换,而无需修改应用程序代码。 **1.2 什么是JMS中的消息(MESSAGING)?** 在JMS中,消息是指在两个或多个应用...