【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

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

关注

评论

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

流程图哪个软件好用?10款好用的流程图软件推荐:boardmix、Visio、Miro…

彭宏豪95

效率工具 职场 工具 流程图 在线白板

JetCache 缓存开源组件设计精要

阿里技术

缓存 JetCache

一文了解MySQL中的多版本并发控制

京东科技开发者

MySQL 京东云 企业号 4 月 PK 榜

印象最深的都是关于 IoTConsensus 共识协议?听听新晋 Committer 怎么说!

Apache IoTDB

IoTDB Apache IoTDB

如何在Java中做基准测试?JMH使用初体验

做梦都在改BUG

Java JMH 基准测试

线上问题排查异闻录

小小怪下士

Java 程序员 后端 堆内存管理

MySQL主从复制原理剖析与应用实践

vivo互联网技术

负载均衡 高可用 主从复制 数据备份 Binary Log

如何将微前端项目部署在同一台服务器同一个端口下

京东科技开发者

微前端 京东云 企业号 4 月 PK 榜

安全测试前置实践1-白盒&黑盒扫描

京东科技开发者

京东云 安全测试 企业号 4 月 PK 榜

前端自动化测试之葵花宝典

京东科技开发者

前端 企业号 4 月 PK 榜

浏览器缓存清理:Cookie for Mac6.9.0激活版

真大的脸盆

Mac Mac 软件 缓存清理 清理缓存 缓存处理工具

阿里P8架构师3年心血终成的453页神级Java系统分析与架构设计文档

做梦都在改BUG

Java 架构设计 系统分析

设计模式-备忘录模式

Java你猿哥

Java 设计模式 ssm 架构师 备忘录模式

Redis缓存穿透/击穿/雪崩以及数据一致性的解决方案

Java你猿哥

redis ssm 架构师 Java工程师

火了!阿里资深架构师总结的春招Java岗核心笔记,GitHub标星20k

Java你猿哥

Java ssm 面经 Java工程师 java核心知识

技术同学如何做好向上管理

老张

职场新人 向上管理

AI 能否取代打工人?| 社区征文

阿发

三周年征文

AI真的会让程序员失业吗 | 社区征文

五分钟学大数据

三周年征文

测试1号位的自我修养

京东科技开发者

测试 京东云 企业号 4 月 PK 榜

华为运动健康服务Health Kit 6.10.0版本新增功能速览!

HMS Core

HMS Core

Redis一主二从环境搭建

京茶吉鹿

nosql redis

五面阿里巴巴拿offer后定级P6:分享Java面经及答案总结

Java你猿哥

Java 面试 面经 春招 Java八股文

包装了三年工作经验的我,被同事发现居然连这些Maven的操作都不懂

Java你猿哥

maven ssm 架构师 Java工程师

这份Java面试八股文让329人成功进入大厂,堪称2023最强

Java你猿哥

Java 面试 面经 春招 Java八股文

MySQL自增ID用完了怎么办?4种解决方案!

Java你猿哥

Java MySQL sql 后端 ssm

MySQL主从复制原理剖析与应用实践

做梦都在改BUG

Java MySQL 数据库 主从复制

展心展力 metaapp:基于 DeepRec 的稀疏模型训练实践

阿里云大数据AI技术

机器学习 算法 稀疏模型

IT架构师全栈成长路线,13张架构图一次说明白

Java你猿哥

Java 面试 架构师 面经 Spring全家桶

GitHub上线一天星标99.9K:阿里内部高逼格SpringCloud实战手册

做梦都在改BUG

Java 架构 微服务 Spring Cloud

Spring 之依赖注入底层原理

Java你猿哥

spring ssm 架构师 Java工程师 spring ioc

博睿数据受邀出席GOPS 2023 深圳站:自适应AI支撑可观测性全面升级

博睿数据

可观测性 智能运维 博睿数据 Bonree ONE 自适应AI

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