首页 / 软件开发 / JAVA / 使用GlassFish实现JMS消息传递
使用GlassFish实现JMS消息传递2011-07-28Deepa Sobhana对于当今的电子商务来说,在分布式异构系统之间进行通信已经成为不可避免的需求。现在,随着 Java 消息服务 (JMS) 等消息标准的出现,开发松散耦合的同步或异步通信分布式系统(用于交换商务数 据和事件)已经非常简单。本文主要介绍如何使用 JMS 和消息驱动 Beans( Message-Driven Beans ,MDB )进行消息传递,特 别是企业消息传递的详细信息。本文还将介绍 GlassFish 应用程序服务器的消息传递功能及其配置设置 。为了更好地说明这些技术,在此还将讨论一个简单的实时应用案例及其实施细节。消息传递简单地说,消息传递是在双方间发生的通信。企业消息传递可以定义为两个软件组件或两个应用程序 之间的通信。消息传递就像发送物理信件一样简单,信件发送者准备好消息、给出正确的邮寄地址,然后 选择正确的邮寄服务。在企业消息传递中也要有一个以特定格式向目的地发送消息的消息发送者。目的地 是面向消息的中间件或者是帮助交换消息的消息队列。而且还要有从目的地同步或异步接收消息的消息用 户。并不强制规定发送者和接受者在同样的时间在线,也不强制规定他们必须相互认识才能交换信息。消息传递系统的关键好处是保持分布式系统松懈地耦合。 松懈耦合使消息传递解决方案不同于其他的 紧密耦合通信解决方案(例如,远程方法调用 (Remote Method Invocation,RMI)、公共对象请求代理 体系结构(Common Object Request Broker Architecture,CORBA)等等)。JMS 消息传递Java 消息服务( Java Messaging Service )是一个建立在 Java 2 平台企业版本 ( Java 2 Platform, Enterprise Edition,Java EE )之上的消息传递 API。它定义了一组创建、发送和接收消息 常用接口。JMS 支持两种消息传递模式:点到点( PTP )模式发布-订阅模式点到点消息传递模式依赖于消息队列概念,也就是,将其中的消息地址写到称作队列 的特定目的地。 接受者从队列中使用消息,对其进行处理,然后确认收到消息。点到点消息传递模式的主要特征有:每条消息有一个使用者。在发送者和接收者之间没有时间依赖性。在发布-订阅模式中,消息地址被写到一个称作主题 的目的地。消息生成器发布消息,使用者订阅消 息。这种消息传递模式的主要特征有:每条消息有多个使用者。在发送者和接受者之间存在时间依赖性,也就是,使用者必须积极接受消息。即使订阅者暂停使用, JMS API 也允许订阅者创建持久订阅方式 来接收消息。使用持久订阅方式,JMS 提供器一直保留订阅的 消息直到收到取消订阅的请求或订阅过期。消息类型JMS 支持 5 种消息类型:文本: 一条简单的文本消息或一个 java.lang.String 对象。对象: Serializable(可序列化) Java 对象。字节: 简单的字节流。映射表: 一组名称 —— 值对集合。数据流: 原始值数据流。消息驱动 Beans(Message-Driven Beans,MDB)消息驱动 bean 的工作是帮助异步处理消息。MDB 担任 JMS 消息的侦听器。JMS 客户机不能找到 MDB 并直接调用方法;相反,客户机将消息发送到 MDB 正在侦听的目的地。当接收到消息时,EJB 容器调用 MDB 的onMessage 方法。这种方法通常将消息转换为 5 种 JMS 消息类型中的 1 种,并作为应用程序的 业务逻辑进行处理。MDB 以异步模式运行,并且是无状态、事务感知的。这些功能使 MDB 更具较高的伸 缩性,为企业发送消息提供了健壮的解决方案。