写点什么

JMS 2.0 的新内容

  • 2013-06-14
  • 本文字数:1845 字

    阅读完需:约 6 分钟

期待已久的 Java EE 7 终于到来了,JMS 2.0 也随之而来,这是 JMS 十多年来的第一次升级。

在最新的 JMS 规范中有一点最值得注意,即 Oracle 称之为“简化的”API 的优雅的表现力。例如,用于发送和接收消息的新 API 去掉了大部分样板文件,显著地减少了所需代码量。如果运行在应用服务器中,新的 API 还支持资源注入,允许应用服务器管理 JMS 对象,从而进一步简化应用。

该框架完全向后兼容,因此在新代码中使用简化的 API 的同时,遗留代码还可以自由使用。目前尚无弃用旧 API 的计划。

JMS 2.0 是 Java EE 7 平台的一部分,但是也可以作为单独的 Java SE 平台使用,不过并非所有特性都支持这两种模式。

我们来比较一下分别使用旧 API 和新 API 的代码示例。

代码清单 1. JMS 1.0 发送消息的语法

复制代码
1 public void sendMessage(ConnectionFactory factory,
Queue queue, String message) {
2 try {
3 Connection connection =
factory.createConnection();
4 try {
5 Session session = connection.createSession(
false, Session.AUTO_ACKNOWLEDGE);
6 MessageProducer messageProducer
= session.createProducer(queue);
7 TextMessage textMessage
= session.createTextMessage(message);
8
9 messageProducer.send(textMessage);
10
11 } finally {
12 connection.close();
13 }
14 } catch (JMSException e) {
15 // handle exception
16 }
17 }

代码清单 2. JMS 2.0 发送同样消息的语法

复制代码
18 public void sendMessage(ConnectionFactory factory,
Queue queue, String message) {
19 try (JMSContext context
= factory.createContext()) {
20
21 context.createProducer().send(queue, message);
22
23 } catch (JMSRuntimeException e) {
24 // handle exception
25 }
26 }

让我们分析一下其变化。首先,第 19 行使用了 Java 7 的“try-with-resources”。新的实现了 AutoCloseable 接口的 JMSContext 类代替了旧的 Connection 类和 Session 类。当 JMSContext 被包含到 try 语句中时(第 19 行),原来所有的“try”设置代码(第 4、11、12 和 13 行)都去掉了。消息创建现在也是隐式的,所以最后的代码相对于原来版本有了很大的简化。

另外,旧有的检查异常(checked exception)JMSException 替换为非检查异常(unchecked exception)JMSRuntimeException,因此不再需要显式捕获。

上面是消息发送代码,消息接收代码同样简洁。

简化的 API 只是新的 JMS 2.0 API 的一部分。此外,还有一些语义增强。现在支持如下特性:

  • 异步发送模式——传统的同步模式会导致阻塞,直到收到服务器的应答。与之不同的是,异步模式会直接返回而不会阻塞。一旦收到应答,会调用一个异步回调。新的 JMSProducer 和遗留版本中对应的 MessageProducer 都支持异步模式。例如,应用可以实现下面的 CompletionListener 接口: ```

    public interface CompletionListener {
    void onCompletion(Message message);
    void onException(Message message, Exception exception);
    }

复制代码
发送消息时只需要这样调用:

messageProducer.send(message,completionListener);

复制代码
- 延迟的消息交付——允许 JMS 客户端按照预定时间交付消息,支持延期处理。应用可以以毫秒为单位设置最短时间,消息系统在将消息交付给消费者之前必须保留这么长时间。
MessageProducer 和 JMSProducer 的 API 是类似的: MessageProducer:

public void setDeliveryDelay(long deliveryDelay)

复制代码
JMSProducer:

public JMSProducer setDeliveryDelay(long deliveryDelay)

复制代码
- 共享相同的订阅主题——允许可伸缩地消费来自同一订阅主题的消息。 JMS 2.0 提供了支持非持久订阅的新方法:

MessageConsumer messageConsumer = session.
createSharedConsumer(topic,sharedSubscriptionName);

复制代码
用于持久订阅的现有方法如下:

MessageConsumer messageConsumer = session.
createDurableConsumer(topic,durableSubscriptionName);

复制代码
这里列出的只是诸多特性中的几种。Oracle 技术网站上有一篇文章——“[What's New in JMS 2.0](http://www.oracle.com/technetwork/articles/java/jms20-1947669.html)”,列出了 JMS 2.0 所有的新特性,同时提供了一些示例代码,读者可以参考。
** 查看英文原文:**[**What's new in JMS 2.0?**](http://www.infoq.com/news/2013/06/JMS_2.0_Released)
2013-06-14 07:212336
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 137.8 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

GOPS现场 | 对话龙智大规模安全研发技术专家,分享静态代码、开源组件扫描干货

龙智—DevSecOps解决方案

开源组件 安全研发 静态代码

拒绝花里胡哨,零基础也能把机器学习给你捣鼓明白

博文视点Broadview

海龟绘图简单科普

吉师职业混子

9月月更

GOPS现场 | 对话某科技公司DevOps工程师,从用户角度探讨DevOps工具链

龙智—DevSecOps解决方案

DevOps 运维 DevOps工具

龙智 | 电话更换通知

龙智—DevSecOps解决方案

分布式架构下如何选择最佳 Store?

KaiwuDB

数据库 分布式数据库 数据存储

【数据结构】带头+双向+循环链表(增、删、查、改)的实现_【附源码、图片示例】_ [初阶篇_ 复习专用]

Dream-Y.ocean

c 双向循环链表 9月月更

一款开源的基于 Angular 的电商 Storefront 开发框架介绍

汪子熙

typescript 前端开发 angular 电商 9月月更

DCAT亮相WAIC 2022浦东分会场——元宇宙博览会暨数字光影大会

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

通用漏洞评分系统 (CVSS)系统入门指南

SEAL安全

漏洞修复 漏洞管理

微服务低代码Serverless平台(星链)的应用实践

京东科技开发者

Serverless 微服务 云原生 低代码 VMS

手把手教大家在 Spring Boot 中处理 flowable 中的用户和组!

江南一点雨

springboot workflow flowable

【C语言】动态内存管理 [进阶篇_ 复习专用]

Dream-Y.ocean

c c++ 9月月更

“企业级零代码黑客马拉松大赛”决赛名单公布

明道云

低代码 零代码 企业数字化转型 黑客马拉松

【数据结构】单链表(增、删、查、改)的实现 [初阶篇_ 复习专用]

Dream-Y.ocean

c 单向链表 9月月更

数据火器库八卦系列之瑞士军刀随APP携带的SQLite

sqlite 数据库 科技 玖章算术

版本控制 | 如何有效管理SVN服务器上的多个储存库

龙智—DevSecOps解决方案

svn SVN储存库

漫谈 SAP 产品里页面上的 Checkbox 设计与实现

汪子熙

JavaScript 前端开发 web开发 SAP 9月月更

瑞云科技总经理邹琼出席2022世界人工智能大会投融资主题论坛

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

SAP 电商云 Spartacus UI 的 checkout 场景中的串行请求设计分析

汪子熙

angular 调试 电商 Spartacus 9月月更

“3” 生万物,勇敢前行

MIAOYUN

【C语言】深度剖析文件操作 [进阶篇_ 复习专用]

Dream-Y.ocean

c 文件 9月月更

Java之static关键字【实例变量与类变量、实例方法与类方法】

Fire_Shield

Java static 9月月更

跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样

华为云开发者联盟

Python 人工智能 企业号九月金秋榜

【Vue3】穿梭框 -- 思路与实现分析

Sam9029

前端 Vue 3 9月月更

【数据结构】顺序表(增、删、查、改)的实现 [初阶篇_ 复习专用]

Dream-Y.ocean

c 顺序表 9月月更

基于高效采样算法的时序图神经网络系统(二)

Baihai IDP

人工智能 神经网络 AI 图数据

OpenHarmony 3.2 Beta源码分析之MediaLibrary

OpenHarmony开发者

OpenHarmony

OSCAR开源产业大会|中国信通院可信开源评估最新结果正式发布

Ada@SegmentFault

MobTech ShareSDK 后台配置说明

MobTech袤博科技

开发者 sdk 微信平台 SDK 教程

元宇宙会议来了,3DCAT助力2022长宁区科技创新主题论坛开展

3DCAT实时渲染

云计算 元宇宙 实时渲染 实时云渲染 云VR

JMS 2.0的新内容_Java_Vikram Gupta_InfoQ精选文章