《JMS简明教程(PDF格式)》第8章


JMS 被管理的对象来做到隔离,这些对象由提供商的管理员创建和客户化,接下来由客户端 
使用。通过 JMS 接口来使用它们的客户端是可移植的。管理员使用提供商专有的工具来创 
建它们。
有两种类型的JMS 被管理对象:
z ConnectionFactory——这个对象用于客户端来创建和提供商的连接。
z Destination——这个对象用于客户端来指定发送消息的目的地,也是接收消息的来 
源。
被管理对象被管理员放置在JNDI 命名空间。JMS 客户端通常在它的文档中注上它要求 
的JMS 被管理对象和这些对象的JNDI 名字应当如何提供给它。
图2? 解释了JMS 管理如何工作。
图2? 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? 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? 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? 支持并发使用的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 支持异步的消费消息
小说推荐
返回首页返回目录