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

消息中间件规范JMS 2.0的十大改进

 
阅读更多

消息中间件规范JMS 2.0的十大改进

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs

消息中间件规范JMS 2.0在编码方面做了很多改进,可以帮助开发者减少编写的代码量。下面,由我一一说明。

一、用JMSContext取代了Connection和Session对象

消息中间件规范JMS 2.0引入了一个新对象——JMSContext,它提供了原先Connection和Session对象同样的功能。

在JMS 1.1中是这样的:

Connection connection = ConnectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

在JMS 2.0中是这样的:

JMSContext context = connectionFactory.createContext(JMSContext.SESSIONA_TRANSACTED);

二、利用try-with-resources块意味着无需调用close语句

在JMS 1.1中如果不调用close语句,那么或许会导致内存资源耗尽。

在JMS 1.1中是这样的:

try{
Connection connection = connectionFactory.createConnection();
try{
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
} finally{
connection.close();
}
} catch(JMSException ex){
ex.printStackTrace();
}

在JMS 2.0中是这样的:

try (Connection connection = connectionFactory.createConnection();) {
......
} catch(JMSException ex){
ex.printStackTrace();
}

注意,上面的代码也可改用JMSContext。

三、在JavaSE中创建会话时无需传递两个参数


在JMS 1.1中是这样的:

Session session = connection.createSession(true,Session.SESSION_TRANSACTED);

在JMS 2.0中是这样的:

Session session = connection.createSession(Session.SESSION_TRANSACTED);

四、在JavaEE事务处理中创建会话无需传递任何参数

在JavaEE事务处理中创建会话,createSession传递的参数会被忽略掉,详见EJB 3.1规范。

在JMS 1.1中是这样的:

// 传递的两个参数都会被忽略事务的行为由容器决定
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);

在JMS 2.0中是这样的:

// JMS 2中提供了无参方法
Session session = connection.createSession();

五、新的JMSProducer对象支持方法链

消息中间件规范JMS 2.0引入了一个新对象——JMSProducer,他允许消息头、消息属性、交付的选项等都在单行代码中通过方法链进行指定。

在JMS 1.1中是这样的:

MessageProducer messageProducer = session.createProducer(domoQueue);
messageProducer.setPriority(1);
TextMessage textMessage = session.createTextMessage(body);
textMessage.setStringProperty("foo", "bar");
messageProducer.send(textMessage);

在JMS 2.0中是这样的:

TextMessage textMessage = context.createTextMessage(body);
context.createProducer().setPriority(1).setProperty("foo", "bar").send(demoQueue, textMessage);

六、无需保存JMSProducer的变量

新的JMSPruducer对象是轻量级对象,因此无需在变量中保存它,当需要时直接实例化即可。

在JMS 1.1中是这样的:

// MessageProducer开销很大,因此需要重用它
MessageProducer messageProducer = session.createProducer(demoQueue);
messageProducer.send(message1);
messageProducer.send(message2);

在JMS 2.0中是这样的:

// JMSProducer是轻量级的,无需用变量保存它
context.createProducer().send(demoQueue, message1);
context.createProducer().send(demoQueue, message2);

七、在JavaEE中,注入JMSContext意味着无需创建或关闭它


在JMS 1.1中是这样的:

try{
Connection connection = connectionFactory.createConnection();
try{
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(demoQueue);
TextMessage textMessage = session.createTextMessage(body);
messageProducer.send(textMessage);
} finally{
connection.close();
}
} catch(JMSException ex){
ex.printStackTrace();
}

在JMS 2.0中是这样的:

try{
context.createProducer().send(inboundQueue, body);
} catch(JMSRuntimeException ex){
ex.printStackTrace();
}

八、当发送消息时,无需实例化消息对象


在JMS 1.1中是这样的:

// 需要创建适合类型的消息对象,再设置其Body
MessageProducer messageProducer = session.createProducer(demoQueue);
TextMessage textMessage = session.createTextMessage("Hello World");
messageProducer.send(textMessage);

在JMS 2.0中是这样的:

// 简单的传递消息Body到send方法
context.createProducer().send(demoQueue, "Hello World");

九、同步接收,可以直接接收消息有效载荷


在JMS 1.1中是这样的:

// 当同步接收时,需给定消息对象,再转换为合适的子类型,再提取Body
MessageConsumer messageConsumer = session.createConsumer(demoQueue);
TextMessage textMessage = (TextMessage)messageConsumer.receive(1000);
if(textMessage==null)
return "Received null"
else
return "Received " + textMessage.getText();

在JMS 2.0中是这样的:

// JMS 2允许直接接收消息Body
JMSConsumer consumer = context.createConsumer(demoQueue);
return "Received " + consumer.receiveBody(String.class, 1000);

十、异步接收在提取消息Body时无需转换


在JMS 1.1中是这样的:

public void onMessage(Message m){
MyObject myObj = (MyObject)((ObjectMessage)m).getObject();
...

在JMS 2.0中是这样的:

public void onMessage(Message m){
MyObject myObj = m.getBody(MyObject.class);

...


分享到:
评论

相关推荐

    JMS 2.0 规范

    JMS(Java Message Service)2.0规范是JSR 343的一部分,它由Java社区成员共同制定并发布,旨在为Java应用程序提供一种标准的企业消息传递机制。JMS 2.0在前一版本的基础上进行了改进和增强,提供了更为简洁、高效的...

    javax.jms-1.1.jar

    JMS规范自1998年首次发布以来,经历了多次更新,目前最新的版本是JMS 2.0,包含更多改进和功能增强。 8. **应用场景**:JMS广泛应用于分布式系统、微服务架构、事件驱动的系统以及任何需要可靠消息传递的场景。例如...

    java消息服务(第二版)

    12. **JMS 2.0改进**:第二版的JMS引入了简化API、增强的批处理支持、幂等性消息和预定义目的地等功能,使得开发更高效且更易于维护。 通过《Java消息服务(第二版)》这本书,你可以深入了解JMS的原理和实践,掌握...

    java开发中间件

    这个特定版本——11.0.0.Final,发布于2017年,它支持Java EE 8规范,包括Servlet 4.0、JPA 2.2、EJB 3.2、JMS 2.0等,为开发者提供了丰富的API和工具来开发企业级应用。 1. **Java EE 8支持**:Java EE 8是企业级...

    apache-artemis-2.11.0-bin.tar.gz

    Apache Artemis是Apache软件基金会的一个开源消息中间件项目,它实现了Java消息服务(JMS)2.0规范,提供高效、可靠的消息传递解决方案。在2.11.0版本中,Apache Artemis提供了许多增强的功能和性能优化。下面将详细...

    activeMQ_spring_Demo.zip_DEMO_activemq_activemq spring_rowbv3

    Rowbv3是ActiveMQ的版本号,它引入了更多优化和新特性,如改进的性能、增强的监控能力以及对最新JMS 2.0规范的支持。在使用Rowbv3版本的ActiveMQ时,开发者可以享受到更稳定的性能和更丰富的功能。 五、示例代码 ...

    JavaEE6规范中文版

    4. **Java Message Service (JMS) 1.1**:JMS是Java平台中处理异步消息的标准,它定义了消息生产者、消费者以及消息中间件之间的接口。在JavaEE6中,JMS被用来实现应用间的解耦和异步通信。 5. **Servlet 3.0**:...

    样本消息

    最新的JMS 2.0规范引入了一些改进,如简化API、支持共享订阅和发送方确认等特性,使得开发更加便捷。 9. **集成与实战**: "sample-messanger-main"可能是一个示例程序,演示如何使用Java和JMS创建一个消息传递...

    spring 4.2 JAR包

    这个版本可能包含对JMS 2.0标准的兼容性增强,以及对不同消息中间件的更好支持。 通过这些JAR包,开发者可以构建出灵活、可扩展且易于维护的Java应用,无论是传统的Web应用还是基于WebSocket的实时应用,都能得到...

    mqadv_dev80_linux_x86-64.tar.gz

    5. **Java Message Service (JMS) 2.0**:支持最新的JMS规范,提供更好的编程模型和更高效的API,使得开发者能更容易地使用MQ进行消息编程。 6. **多协议支持**:除了传统的MQ协议,还支持HTTP/S、RESTful API和...

    activemq-store-jdbc-1.5.jar.zip

    总结,`activemq-store-jdbc-1.5.jar`是ActiveMQ实现数据库存储的关键组件,它结合了消息中间件和关系数据库的优势,提供了强大而可靠的消息存储解决方案。理解并熟练运用这一组件,对于构建高效、安全的分布式系统...

    activemq-web-5.2.0.jar.zip

    Apache ActiveMQ 是一个开源的消息中间件,它遵循 JMS(Java Message Service)规范,提供了高效、可靠的异步通信能力。在Java开发环境中,ActiveMQ扮演着重要的角色,尤其在分布式系统和微服务架构中,它作为消息...

    J2EE API.CHM

    J2EE v 1.3版本引入了许多改进和新特性,如增强的EJB 2.0规范、JMS 1.1、JPA的早期版本等,旨在提高开发效率和应用性能。通过这些API,开发者能够构建出复杂、高效的企业级应用系统,广泛应用于银行、电信、电子商务...

    J2EE SDK1.6 API

    5. **JMS(Java Message Service)**:JMS是Java平台上的消息中间件接口,用于在分布式环境中进行异步通信。Java EE 1.6提供了对JMS 1.1的支持,允许应用程序发送和接收消息,实现解耦和异步处理。 6. **JTA(Java ...

    websphere9 windows版

    在Websphere 9中,它支持Java EE 8规范,带来了最新的API和技术,如JMS 2.0、JSF 2.3和CDI 2.0等。 2. **Windows平台优化** 在Windows环境下,Websphere 9进行了优化,确保与操作系统的无缝集成,提供更好的性能和...

    java ee5 document

    Java EE 5包含了对JMS的集成,使开发者能够构建基于消息的中间件系统。 5. **JAXB (Java Architecture for XML Binding) 2.0**:这是一个用于XML和Java对象之间自动转换的工具,简化了XML数据的处理。JAXB 2.0引入...

    J2EE_5.0.rar

    JMS(Java Message Service)1.1是J2EE 5.0中的消息中间件接口,允许开发人员创建异步和解耦的应用程序。通过JMS,应用程序可以发送和接收消息,实现队列和主题通信,提升系统的可扩展性和可靠性。 **8. 部署和管理...

    J2EE_1.5_API中文帮助文档.chm(完全可用)

    4. **JMS(Java Message Service)**:JMS是Java平台的消息中间件API,1.1版本在J2EE 1.5中,用于实现异步通信和解耦应用程序。通过消息队列,不同组件可以在不受时间限制的情况下交互数据。 5. **JTA(Java ...

    java ee 5 编程指南

    - **JMS (Java Message Service)**:一种消息中间件规范,用于实现分布式环境中异步消息传递。 - **JNDI (Java Naming and Directory Interface)**:用于查找和访问命名服务和目录服务。 #### 三、Java EE 5 的主要...

Global site tag (gtag.js) - Google Analytics