按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
JMS 被管理的对象来做到隔离,这些对象由提供商的管理员创建和客户化,接下来由客户端
使用。通过 JMS 接口来使用它们的客户端是可移植的。管理员使用提供商专有的工具来创
建它们。
有两种类型的JMS 被管理对象:
z ConnectionFactory——这个对象用于客户端来创建和提供商的连接。
z Destination——这个对象用于客户端来指定发送消息的目的地,也是接收消息的来
源。
被管理对象被管理员放置在JNDI 命名空间。JMS 客户端通常在它的文档中注上它要求
的JMS 被管理对象和这些对象的JNDI 名字应当如何提供给它。
图2�1 解释了JMS 管理如何工作。
图2�1 JMS 管理
2。4 两种消息风格
JMS 应用既可以使用PTP 风格又可以使用Pub/Sub 消息风格,在后面的章节中会有更详
细的描述。应用也可以将两种风格组合到一个应用中。消息的这两种风格常被称为消息域。
JMS 提供了这两种消息域,因为它们代表了两种通用的消息模型。
当使用JMS API 时,开发人员可以使用两种消息模型的接口和方法。当使用接口时,消
息系统的行为可能会稍有不同,因为两种消息域有不同的语义。这些语义的差别在第 5 章
“JMS 点对点模型”和第6 章“JMS 发布/订阅模型”中描述。
13 / 66
…………………………………………………………Page 14……………………………………………………………
2。5 JMS 接口
JMS 基于一系列通用的消息概念。每个JMS 消息域—PTP 和Pub/Sub—也为这些概念定
义了各自的接口集。
表2�1 PTP 和Pub/Sub 接口的关系
JMS 公共接口 PTP 专有接口 Pub/Sub 专有接口
ConnectionFactory QueueConnectionFactory TopicConnectionFactory
Connection QueueConnection TopicConnection
Destination Queue Topic
Session QueueSession TopicSession
MessageProducer QueueSender TopicPublisher
MessageConsumer QueueReceiver , TopicConsumer
QueueBrowser
JMS 通用接口提供了一个独立于PTP 和Pub/Sub 消息域的域视图。鼓励JMS 客户端程序
员使用这些接口来创建他们的客户端程序。
下面列出了这些JMS 概念的简要定义。参见第4 章“JMS 通用工具”来详细了解这些
概念。
对于两种消息域的差别的详细内容,参见第5 章“JMS 点对点模型”和第6 章“JMS 发
布/订阅模型”。
z ConnectionFactory——客户端使用这个被管理对象来创建一个Connection 。
z Connection——一个到JMS 提高商的活动连接。
z Destination——封装了消息目的地标识的被管理对象。
z Session——一个用于发送和接收消息的单线程上下文。
z MessageProducer——一个由Session 创建用于往目的地发送消息的对象。
z MessageConsumer——一个由Session 创建用于接收发送到目的地的消息的对象。
图2�1 JMS 对象间关系概览
在这个文档中使用的术语“消费”是指通过JMS 客户端接收消息;也就是说,一个JMS
提供商已经收到一个消息并将它给了它的客户端。由于 JMS 支持同步和异步接收消息,因
14 / 66
…………………………………………………………Page 15……………………………………………………………
此术语“消费”在不需要区分它们的时候使用。
术语“生产”用作发送消息的最通用的术语。它指给予 JMS 提供商一个消息以转发到
一个目的地。
2。6 开发一个JMS 应用
广义的讲,一个JMS 应用是一个或多个交换消息的JMS 客户端。应用也涉及非JMS 客
户端;但是,这些非JMS 客户端使用JMS 提供商的本地API 而不是JMS 的API 。
一个JMS 应用可以被架构和部署为一个单元。在许多情况下,JMS 客户端是被逐渐增加
到线程的应用中的。
应用使用的消息定义可以来源于JMS ,或者他们可能已经由应用的非JMS 部分定义了。
2。6。1 开发一个JMS 客户端
典型的JMS 客户端执行下面的JMS 设置过程:
z 使用JNDI 来发现ConnectionFactory 对象。
z 使用JNDI 来发现一个或多个Desitination 对象。
z 使用ConnectionFactory 来创建一个具有消息转发约束的JMS Connection 。
z 使用Connection 来创建一个或多个JMS Session 。
z 使用Session 和Destination 来创建需要的MessageProducer 和MessageConsumer。
z 告诉Connection 开始转发消息。
此时,客户端有了生产和消费消息的基本的JMS 设置。
2。7 安全
JMS 没有提供控制或配置消息完整或消息私密的特性。
这期望由 JMS 提供商来提供。也期望由提供商专有的管理工具来配置这些服务。客户
端将得到正确的安全配置作为他们使用的被管理对象的一部分。
2。8 多线程
JMS 已经要求它的所有对象都支持并发誓要。由于支持并非访问通常会增加一些成本和
复杂性,所以 JMS 限制了那些很自然要被多线程客户端并发访问的对象的要求。其他的都
被设计成在一个时间只能被一个逻辑线程访问。
表2�2 支持并发使用的JMS 对象
JMS 对象 支持并非使用
Destination YES
ConnectionFactory YES
Connection YES
Session NO
MessageProducer NO
15 / 66
…………………………………………………………Page 16……………………………………………………………
MessageConsumer NO
JMS 定义了一些特殊的规则来限制Session 的并发使用。由于他们要求比在这里呈现的
更多的JMS 知识,所以他们将在后面描述。这里我们将描述他们必须遵守的基本原理。
有两个原因要限制并发访问Session 。第一个,Session 是支持事务的JMS 实体。实现多
线程的事务是非常困难的。第二,Session 支持异步的消费消息