Java Message Service 介紹

本文探讨了Java Message Service (JMS) 在企业消息系统中的角色及其提供的标准接口。介绍了面向消息的中间件 (MOM) 的核心概念,包括点对点模型与发布订阅模型,并解释了JMS如何简化跨不同MOM产品的消息传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                                               文章來源……IBM中國

企业消息系统

Java Message Service 是由 Sun Microsystems 开发的,它为 Java 程序提供一种访问 企业消息系统 的方法。在讨论 JMS 之前,我们分来析一下企业消息系统。

企业消息系统,即 面向消息的中间件(MOM),提供了以松散耦合的灵活方式集成应用程序的一种机制。它们提供了基于 存储和转发 的应用程序之间的异步数据发送,即应用程序彼此不直接通信,而是与作为中介的 MOM 通信。

MOM 提供了有保证的消息发送(至少是在尽可能地做到这一点),应用程序开发人员无需了解远程过程调用(PRC)和网络/通信协议的细节。

消息灵活性

应用程序 A 与应用程序 B 通过使用 MOM 的应用程序编程接口(API)发送消息进行通信。

MOM 将消息路由给应用程序 B,这样,消息就可以存在于完全不同的计算机上,MOM 负责处理网络通信。如果网络连接不可用, MOM 会存储消息,直到连接变得可用时,再将消息转发给应用程序 B。

灵活性的另一方面体现在,当应用程序 A 发送其消息时,应用程序 B 甚至可以不处于执行状态。MOM 将保留这个消息,直到应用程序 B 开始执行并试着检索消息为止。这还防止了应用程序 A 因为等待应用程序 B 检索消息而出现阻塞。

这种异步通信要求应用程序的设计与现在大多数应用程序不同,不过,对于时间无关或并行处理,它可能是一个极其有用的方法。

松散耦合

企业消息系统的真正威力在于应用程序的 松散耦合。在前一页的图表中,由应用程序 A 发送消息指定一个特定目标,如“订单处理”。而现在,是由应用程序 B 提供订单处理功能。

但是在将来,我们可以用不同的订单处理程序替换应用程序 B,应用程序 A 将不再是明智之选。替换应用程序将继续发送消息完成“订单处理”,而消息也仍将得到处理。

同样,我们也可以替换应用程序 A,只要替换应用程序继续发送消息进行“订单处理”,订单处理程序就无需知道是否有一个新的应用程序在发送订单。

发布和订阅

 

最初,开发企业消息系统是为了实现 点对点模型 (PTP),由一个应用程序生成的每个消息都由另一个应用程序接收。近年来,出现了一种新的模型,叫做 发布与订阅 (或者 pub/sub)。

Pub/sub 用称为 主题(topic) 的内容分层结构代替了 PTP 模型中的惟一目的地,发送应用程序 发布 自己的消息,指出消息描述的是有关分层结构中的一个主题的信息。

希望接收这些消息的应用程序 订阅了 这个主题。订阅包含子主题的分层结构中的主题的订阅者可以接收该主题和其子主题发表的所有消息。

图2展示了发布和订阅模型。

多个应用程序可以就一个主题发布和订阅消息,而应用程序对其他人仍然是匿名的。MOM 起着 代理(broker) 的作用,将一个主题已发表的消息路由给该主题的所有订阅者。

JMS 是什么?

 

Java Message Service 规范 1.1 声称:

 

JMS 是一组接口和相关语义,它定义了 JMS 客户如何访问企业消息产品的功能。

 

在 JMS 之前,每一家 MOM 厂商都用专有 API 为应用程序提供对其产品的访问,通常可用于许多种语言,其中包括 Java 语言。JMS 通过 MOM 产品为 Java 程序提供了一个发送和接收消息的标准的、便利的方法。用 JMS 编写的程序可以在任何实现 JMS 标准的 MOM 上运行。

JMS 可移植性的关键在于:JMS API 是由 Sun 作为一组接口而提供的。提供了 JMS 功能的产品是通过提供一个实现这些接口的提供者来做到这一点的。

开发人员可以通过定义一组消息和一组交换这些消息的客户机应用程序建立 JMS 应用程序。

JMS 的目标

 

更好地理解 JMS 有助于了解 JMS 规范的制定者设置的目标。

现在,市场上有许多企业消息产品,生产这些产品的几家公司也参与了 JMS 的开发。

现有的这些系统的能力和功能各不相同。这些制定者知道如果 JMS 结合所有现有系统的所有功能,那么它会变得过于复杂。同样,他们相信,他们也不能让 JMS 只局限于所有系统共有的那些特性。

制定者相信,让 JMS 包括实现“高级的企业应用程序”所需要的所有功能是很重要的。

JMS 规范中声明, JMS 的目标是:

  • 定义一组消息公用概念和实用工具。

  • 最少化程序员使用消息时必须学习的概念。

  • 最大化消息应用程序的可移植性。

  • 最小化实现一个提供者所需的工作量。

  • 为点对点和 pub/sub 提供客户机接口。“域”是用于在前面讨论的消息模型的 JMS 术语。(注意:提供者不需要实现两个域。)

JMS 1.1 中的新内容:统一域

在 JMS 1.1 以前的版本中,每一个域都有自己的特定于该域的一组客户机接口。JMS 版本 1.1 提供了单一的一组接口,它允许客户机可以在两个域中发送和接收消息。这些“域无关的接口”保留了每一个域的语义和行为,是实现 JMS 客户机的最好选择。支持特定于域的接口是为了向后兼容性,新的开发不该使用它。

统一域的好处是:

  • 它展示了用于客户机编程的更简单的编程模型。
  • 队列和主题的操作可以是同一事务的一部分。
  • 它为 JMS 提供者提供了优化其实现的机会。

哪些是 JMS 没有提供的

   

以下特性在MOM 产品中常见,但在 JMS 规范中没有出现。尽管 JMS 制定者承认它们对于开发功能强大的消息应用程序很重要,但是这些功能是特定于 JMS 提供者的。

JMS 提供者可以以任何他们愿意的方式自由实现这些功能:

  • 负载平衡和容错
  • 错误和咨询系统消息和通知
  • 管理
  • 安全性
  • Wire 协议
  • 消息类型仓库 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值