写点什么

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

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

关注

评论

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

怎么预防LED显示屏静电

Dylan

设备 LED显示屏 全彩LED显示屏

从青铜到王者,揭秘 Serverless 自动化函数最佳配置

阿里巴巴云原生

阿里云 Serverless 云原生

尚硅谷Redis7实战教程发布

小谷哥

云快充研发中心平台架构师谈云原生稳定性建设之路

阿里巴巴中间件

阿里云 容器 云原生

从资源弹性到数据弹性,乾象如何将云上量化研究效率提升 40%?

阿里巴巴云原生

阿里云 云原生

如何基于 Antmove 将小程序快速迁移至 FinClip 环境

FN0

小程序 支付宝小程序 finclip

大国重器用友BIP,助力贸易行业数智化转型

用友BIP

数智化

技术专家云集,OpenHarmony技术峰会分论坛聚焦内核及视窗创新

极客天地

博睿数据数智领航营全国巡讲火热预约中,扫码即可参与报名~ ​​​

博睿数据

智能运维 博睿数据 数智领航营

关于印度跨境数据传输,印度放宽了跨境数据传输

镭速

消灭报销,从超级差规开始,用友BIP解决大型企业商旅费控核心难题用友BIP

用友BIP

差旅报销

写作一年之后开始反思博客应该写什么

宇宙之一粟

个人成长 写作 博客

基于人形检测的划区域客流统计

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜 人形检测

软件测试/测试开发 | 测试平台开发-前端开发之Vue.js 框架

测试人

软件测试 测试开发 测试平台

科技大势怎么看 2023怎么干?

加入高科技仿生人

人工智能 低代码 科技 数字孪生 6G

好工作怎么选?五个核心的考量

小谷哥

软件测试/测试开发 | 跨平台API对接(Java)

测试人

软件测试 自动化测试 测试发开

车企数据分类分级的实践指南出炉!“数据安全推进计划”发布,奇点云参编

奇点云

数据安全 奇点云 数据分类分级 车企

详解Redis的主从同步原理

C++后台开发

redis 中间件 主从同步 后端开发 Linux服务器开发

免费下载丨一看即会,Serverless 技术进阶必读百宝书

阿里巴巴云原生

阿里云 Serverless 云原生

BI工具数据看板哪个好,瓴羊Quick BI整不错!

流量猫猫头

搞定预设,让你的 ChatGPT 不受限制 | 社区征文

江户川码农

人工智能 聊天机器人 openai ChatGPT

阿里云函数计算助力高德RTA广告投放系统架构升级

阿里巴巴中间件

阿里云 云原生 函数计算

60% 程序员大呼:我要远程办公!

引迈信息

敏捷开发 低代码 远程办公

转型调研 | “鼎新汇•企业行”第一站:走进中国联通软件研究院

信通院IOMM数字化转型团队

数字化转型 IOMM 鼎新汇•企业行 鼎新杯

附安装包和快捷键!5个不能错过的 Blender 插件

Finovy Cloud

软件 blender 3ds Max云渲染

分投趣fintoch去中心化借贷交易dapp系统开发搭建

开发微hkkf5566

阿里云 ACK@Edge 助力元戎启行加速进入自动驾驶规模化生产

阿里巴巴云原生

阿里云 云原生容器 云原生r

Nydus 在约苗平台的容器镜像加速实践

SOFAStack

开源 互联网 开发

干货演讲!龙蜥自动化运维平台SysOM 2.0调度、内存相关诊断功能介绍 | 第 70-71 期

OpenAnolis小助手

内存 系统运维 sig 龙蜥大讲堂 SysOM

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