AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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:212561
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

java培训:JVM 的面试题

@零度

JVM JAVA开发

大数据培训:Flink面试连环17问

@零度

flink 大数据开发

凡泰极客加入中商联互联网应用工作委员会并荣任常务委员单位

FinClip

知名服务器运维软件厂商堡塔加入龙蜥社区,并完成与 Anolis OS 兼容适配

OpenAnolis小助手

Linux 开源 服务器 安全技术

前端培训:Vue3添加公共方法与使用

@零度

前端开发 Vue3

手把手带你开发一款提效工具--VScode插件

得物技术

效率工具 前端 vscode 前端开发 插件

揭秘2022冬奥黑科技,阿里云视频云「Cloud ME」如何实现全息会面?

阿里云CloudImagine

阿里云 音视频 全息显示 视频云 冬奥会

【游戏研发必看】3 步配置 P4IGNORE + 精彩问答解析(用户文章转载)

龙智—DevSecOps解决方案

perforce P4IGNORE 游戏研发

不要害怕XXE漏洞:了解它们的凶猛之处以及检测方法

龙智—DevSecOps解决方案

代码安全 静态代码分析 漏洞检测 XXE 漏洞

大厂晋升指南:材料准备,PPT写作和现场答辩

邴越

大厂技能 2月月更 晋升 职级

拥抱国产化,推动产业互联网,拍乐云发布RTC私有云解决方案

拍乐云Pano

音视频 产业互联网 私有云 国产化

会声会影2022全新GIF功能详解

懒得勤快

如何在TypeScript/JavaScript项目里引入MD5校验和

华为云开发者联盟

JavaScript typescript npm md5 MD5校验

netty系列之:EventLoop,EventLoopGroup和netty的默认实现

程序那些事

Java Netty 程序那些事

看懂这5幅图,研发效能分析和改进就容易了

阿里云云效

阿里云 运维 数据分析 云原生 研发

HarmonyOS Lottie组件,让动画绘制更简单

HarmonyOS开发者

UI HarmonyOS ArKUI 3.0

什么是规划物料清单(Planning BoM)?

龙智—DevSecOps解决方案

BOM Planning BoM 规划物料清单 半导体行业

Linux之lsof命令

入门小站

FinClip邀你来出战|Hackthon Coding Party 一触即发

FinClip

龙蜥社区一周动态 | 2.14-2.20

OpenAnolis小助手

Linux 开源 动态

【营】在开局,提升【豹】发力 - vivo活动插件管理平台

vivo互联网技术

前端 插件系统 构架

IOS技术分享| 你画我猜小游戏快速实现

anyRTC开发者

音视频 移动开发 互动白板 你画我猜 社交娱乐

某神奇App data加密算法解析(一)

奋飞安全

android js 移动安全

开源免费的舆情系统的架构

思通数科

爬虫 数据采集 舆情 舆情分析

【云管平台】三大知名云管平台简单介绍

行云管家

云计算 云管平台 云资源 云 云时代 2B

全球案例 | 凯捷如何通过 Jira Software 和 Confluence 将全球产品团队联系起来

龙智—DevSecOps解决方案

Jira Atlassian Atlassian 凯捷 共享平台

研究了2.1亿个皇堡后,英特尔BigDL发现了真相

科技新消息

如何用AI技术增强企业认知智能?超详细架构解读

博文视点Broadview

在线键盘按键检测工具

入门小站

工具

2021年中国在线婚恋交友行业分析

易观分析

婚恋行业

混合多云环境下的云成本管理与优化

鲸品堂

成本优化 实践案例 云资源

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