
Java 消息服务 (JMS) 编程模型
本部分中讨论了 JMS 编程模型。
JMS 定义用于从消息传递提供程序访问服务的 API;即它并不是产品本身。它是消息传递提供程序供应商实施的一组接口类。然后,使用 JMS API 的应用程序可以与供应商提供的消息传递提供程序进行通信。JMS API 已成为 Java™ 应用程序的业界标准接口,可使用支持 JMS API 的消息传递提供程序来创建、发送、接收和读取消息。该标准与 Java Platform, Enterprise Edition (Java EE) 平台相关联。Java EE 是一组标准,通过基于组件的方式来开发、汇编和部署企业应用程序。Java EE 容器实施标准运行时环境,可提供服务质量项,如安全性、事务支持和线程共享。
在下图中,JMS 提供程序实施 JMS API。它是 JMS 客户机与其进行交互的实体。JMS 客户机通过发生的交互来建立连接和会话。JMS 客户机基于连接工厂中的配置信息来建立连接,并根据目标识别要发送的消息或要检索的消息。连接工厂和目标对象均列在 Java 命名和目录接口 (JNDI) 名称空间中。JNDI 是 Java 业界标准 API,用于访问命名和目录服务。由于连接工厂和目标均是 JNDI 管理的对象,因此这意味着 JMS 客户机可以连接到不同的 JMS 提供程序,而无需更改 JMS 客户机代码;即,创建了可移植性。此外,还意味着通常能够并确实动态更改的属性(如目标)可以独立于 JMS 客户机代码进行更改。

| 常用 | 点到点 | 发布/预订 |
|---|---|---|
| ConnectionFactory * | QueueConnectionFactory * | TopicConnectionFactory * |
| Connection | QueueConnection | TopicConnection |
| Destination * | Queue * | Topic * |
| Session | QueueSession | TopicSession |
| MessageProducer | QueueSender | TopicPublisher |
| MessageConsumer | QueueReceiver, QueueBrowser | TopicSubscriber |
JMS 应用程序写入接口仅用于参考。特定于供应商的信息会封装在下列 JMS 管理的对象的实施中:QueueConnectionFactory、TopicConnectionFactory、Queue 和 Topic。
这些 JMS 管理的对象使用由供应商提供的管理工具进行构建,并存储在 JNDI 名称空间中。JMS 应用程序可以从名称空间检索这些对象并进行使用,无需知道是哪个供应商提供的实施。
在运行时,JMS 客户机会从 JNDI 名称空间中检索连接工厂(ConnectionFactory 对象)并将其用于创建连接。连接会创建会话,然后会话将创建消息发起者和/或消息使用者。会话也会创建消息,这些消息将使用消息发起者和消息使用者来发送到目标或从目标中进行检索(从 JNDI 名称空间中进行检索)。

详细讨论 JMS 及其与 WebSphere® 的关系的建议书籍为 Enterprise Messaging Using JMS and IBM® WebSphere,作者是 Kareem Yusuf。