![](../../upload/picture/pic/10007/85e43e76-e43b-3dac-afcf-4f6294ef8a6c.jpg)
消息中间件原理及JMS简介之一
作者:orangelizq
摘要:
现今,越来越多的企业面临着各种各样的数据集成和系统整合,CORBA、DCOM、RMI等RPC中间件技术也应运而生,但由于采用RPC同步处理技术,在性能、健壮性、可扩展性上都存在着诸多缺点。而基于消息的异步处理模型采用非阻塞的调用特性,发送者将消息发送给消息服务器,消息服务器在合适的时候再将消息转发给接收者;发送和接收是异步的,发送者无需等待,二者的生命周期也可以不必相同,而且发送者可以将消息间接传给多个接收者,大大提高了程序的性能、可扩展性及健壮性,这使得异步处理模型在分布式应用上比起同步处理模型更具有吸引力。[5]
本文首先介绍了消息中间件的原理,然后介绍了目前流行的消息中间件产品和一些开源实现。最后详细分析了SUN及其伙伴公司提出的旨在统一各种消息中间件系统接口的规范(JMS)。
关键字:消息中间件,JMS,点对点,发布/订阅
一、中间件简介
1.1 中间件的定义
中间件(middleware)是基础软件的一大类,属于可复用的软件范畴。中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的应用软件。[1]
IDC对中间件的定义为:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件定位于客户机服务器的操作系统之上,管理计算机资源和网络通信。
因而中间件是指一类软件,是基于分布式处理的软件,最突出的特点是其网络通信功能。也可认为中间件是位于平台和应用之间的通用服务,这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台,可以有符合接口和协议的多种实现。[1]
![](http://www.blogjava.net/images/blogjava_net/orangelizq/JavaRMI/001.JPG)
图1.1 中间件
1.2 中间件的分类
按照IDC的分类方法,中间件可分为六类:[1]
1) 终端仿真/屏幕转换
2) 数据访问中间件(UDA)
3) 远程过程调用中间件(RPC)
4) 消息中间件(MOM)
5) 交易中间件(TPM)
6) 对象中间件
然而在实际应用中,一般将中间件分为两大类:一类是底层中间件,用于支撑单个应用系统或解决一类问题,包括交易中间件、应用服务器、消息中间件、数据访问中间件等;另一类是高层中间件,更多的用于系统整合,包括企业应用集成中间件、工作流中间件、门户中间件等,他们通常会与多个应用系统打交道,在系统中层次较高,并大多基于前一类的底层中间件运行。 1.2.1 终端仿真/屏幕转换
此类中间件用于实现客户机图形用户接口与已有的字符接口方式的服务器应用程序之间的互操作,应用与早期的大型机系统,现在已很少使用。
1.2.2 数据访问中间件
此类中间件是为了建立数据应用资源互操作的模式,对异构环境下的数据库或文件系统实现联接。
1.2.3 远程过程调用中间件
此类中间件可以使开发人员在需要时调用位于远端服务器上的过程,屏蔽了在调用过程中的通信细节。一个应用程序使用RPC来远程执行一个位于不同地址空间里的过程,在效果上看和执行本地调用相同。
1.2.4 交易中间件
此类中间件是专门针对联机交易系统而设计的。联机交易系统需要处理大量并发进程,处理并发涉及到操作系统,文件系统,编程语言,数据通信,数据库系统,系统管理,应用软件等。而交易中间件根据分布式交易处理的标准及参考模型,对资源管理,交易管理和应用进行了实现,从而使得基于交易中间件开发应用程序更为简单。交易中间件基本上只适用于联机交易系统,是一种较为专用的中间件。
1.2.5 消息中间件
此类中间件是指利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
消息中间件可以即支持同步方式,又支持异步方式。异步中间件比同步中间件具有更强的容错性,在系统故障时可以保证消息的正常传输。异步中间件技术又分为两类:广播方式和发布/订阅方式。由于发布/订阅方式可以指定哪种类型的用户可以接受哪种类型的消息,更加有针对性,事实上已成为异步中间件的非正式标准。目前主流的消息中间件产品有IBM的MQSeries,BEA的MessageQ和Sun的JMS等[1]。
1.2.6 对象中间件
传统的对象技术通过封装、继承及多态提供了良好的代码重用功能。但这些对象只存在与一个程序中,外界并不知道它们的存在,也无法访问它们。对象中间件提供了一个标准的构建框架,能使不同厂家的软件通过不同的地址空间,网络和操作系统实现交互访问。对象中间件的目标是为软件用户及开发者提供一种应用级的即插即用的互操作性。目前主流的对象中间件有OMG的CORBA,Microsoft 的COM以及IBM的SOM,Sun的RMI等。
1.3 中间件的特点
一般来讲,中间件具有以下一些特点:满足大量应用的需求,运行于多种硬件和操作系统平台,支持分布式计算,支持标准接口和协议。开发人员通过调用中间件提供的大量API,实现异构环境的通信,从而屏蔽异构系统中复杂的操作系统和网络协议。
由于标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成为许多标准化工作的主要部分。分布式应用软件借助中间件可以在不同的技术之间共享资源。
总的来说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少了程序设计的复杂性,将注意力集中与自己的业务上,不必再为程序在不同软件系统上的移植而重复工作,从而大大减少了技术上的负担。
二、消息中间件原理
面向消息的中间件(MOM),提供了以松散耦合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送,即应用程序彼此不直接通信,而是与作为中介的MOM通信。MOM提供了有保证的消息发送(至少是在尽可能地做到这一点),应用程序开发人员无需了解远程过程调用(PRC)和网络/通信协议的细节。
2.1 消息中间件简介
消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。
消息中间件适用于需要可靠的数据传送的分布式环境。采用消息中间件机制的系统中,不同的对象之间通过传递消息来激活对方的事件,完成相应的操作。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。消息中间件能在不同平台之间通信,它常被用来屏蔽掉各种平台及协议之间的特性,实现应用程序之间的协同,其优点在于能够在客户和服务器之间提供同步和异步的连接,并且在任何时刻都可以将消息进行传送或者存储转发,这也是它比远程过程调用更进一步的原因。
如下图所示,应用程序A与应用程序B通过使用 MOM 的应用程序编程接口(API)发送消息进行通信。
MOM将消息路由给应用程B,这样消息就可以存在于完全不同的计算机上,MOM 负责处理网络通信。如果网络连接不可用,MOM会存储消息,直到连接变得可用时,再将消息转发给应用程序B。
灵活性的另一方面体现在,当应用程序A发送其消息时,应用程序B甚至可以不处于执行状态。MOM将保留这个消息,直到应用程序B开始执行并试着检索消息为止。这还防止了应用程序A因为等待应用程序B检索消息而出现阻塞。 这种异步通信要求应用程序的设计与现在大多数应用程序不同,不过,对于时间无关或并行处理,它可能是一个极其有用的方法。 2.2 消息中间件与分布式对象调用的比较
分布式对象调用,如CORBA,RMI和DCOM,提供了一种通讯机制,透明地在异构的分布式计算环境中传递对象请求,而这些对象可以位于本地或远程机器。它通过在对象与对象之间提供一种统一的接口,使对象之间的调用和数据共享不再关心对象的位置、实现语言及所驻留的操作系统。这个接口就是面向对象的中间件。
尽管面向对象的中间件是一种很强大的规范被广泛应用,但是面对大规模的复杂分布式系统,这些技术也显示出了局限性:
1.同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行。
2.客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行,如果由于服务对象崩溃或网络故障导致客户的请求不可达,客户会接收到异常。
为了解决这些问题,出现了面向消息的中间件,它较好地解决了以上的问题。
消息中间件作为一个中间层软件,它为分布式系统中创建、发送、接收消息提供了一套可靠通用的方法,实现了分布式系统中可靠的、高效的、实时的跨平台数据传输。消息中间件减少了开发跨平台和网络协议软件的复杂性,它屏蔽了不同操作系统和网络协议的具体细节,面对规模和复杂度都越来越高的分布式系统,消息中间件技术显示出了它的优越性:
1.采用异步通信模式:发送消息者可以在发送消息后进行其它的工作,不用等待接收者的回应,而接收者也不必在接到消息后立即对发送者的请求进行处理;
2.客户和服务对象生命周期的松耦合关系:客户进程和服务对象进程不要求都正常运行,如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户不会接收到异常,消息中间件能保证消息不会丢失。
分享到:
相关推荐
JMS 的核心概念包括消息(Message)、生产者(Producer)、消费者(Consumer)、消息传递域(Domains)以及一系列支持消息传递的基础组件。 **1.2.1 JMS 消息** - **消息头(Header)**:包含消息的元数据,如目的...
IBM MQSeries是市场上领先的消息中间件产品之一,支持多种消息传递模型,如点对点和发布/订阅。 **3.2 BEA MessageQ** BEA MessageQ是另一个广泛使用的消息中间件解决方案,特别适合于高可用性和高性能的应用场景。...
### TIBCO Rendezvous (TIBCO RV) 与 IBM MQ 及 JMS 消息中间件的对比分析 #### TIBCO Rendezvous 技术简介 TIBCO Rendezvous(简称TIBCO RV)是一款强大的中间件产品,它通过一系列专有的技术,实现了异构系统...
### JMS概念及原理简介 #### 一、JMS概述 Java消息服务(Java Message Service,简称JMS)是Java平台中的消息中间件规范,它允许应用程序组件通过异步通信来生产、发送、消费和接收消息。JMS提供了一种与具体实现...
ActiveMQ是Java领域内广泛应用的消息中间件之一,以其开源、高性能、高可靠性和丰富的特性而备受赞誉。在这个学习历程中,我们将深入探讨ActiveMQ的核心概念、工作原理以及如何在实际项目中应用。 一、消息中间件...
1. **消息队列**:消息中间件的核心概念之一是消息队列,它允许应用程序将消息放入队列中,而不是直接发送给接收者。这种设计使得发送者和接收者可以异步工作,提高系统的整体响应速度。 2. **解耦**:消息中间件...
ActiveMQ作为Apache基金会下的开源项目,是业界领先的、功能丰富的JMS(Java Message Service)消息中间件之一,为开发者提供了强大的消息传递能力。本文旨在深入探讨ActiveMQ在Java开发中的应用模式,解析其工作...
ActiveMQ是中国最流行的开源消息中间件之一,它基于Java Message Service (JMS) 规范,为应用程序提供了异步通信的能力。在这个“activeMQ消息中间件入门示例”中,我们将探讨如何设置基本的生产者和消费者来实现...
ActiveMQ是中国最流行的消息中间件之一,它是一个开源的、基于Java消息服务(JMS)规范的实现,被广泛应用于分布式系统中,用于处理异步通信、解耦系统组件以及提高系统的可扩展性。在本压缩包文件"activeMQ-master...
中间件的学习入门资料是一种系统性的学习途径,用于帮助初学者理解和掌握中间件的基本概念、原理及应用。中间件作为一种基础软件,位于操作系统和应用软件之间,为应用软件提供了一系列的功能和环境支持。它不仅是...
点对点(P2P)是JMS支持的消息传递模式之一,本章详细介绍了P2P的工作原理,包括如何创建队列、发送消息到队列、以及如何从队列中消费消息。此外,还探讨了P2P模型下的消息持久性和可靠性问题。 ### 第五章:发布/...
Java消息服务(JMS,Java Message Service)作为Java Platform Enterprise Edition (Java EE) 的重要组成部分之一,为开发者提供了一个强大的消息中间件标准。通过这一标准,应用组件能够在Java平台上创建、发送、...
在提供的“一头扎进JMS之ActiveMQ视频教程”中,你将学习如何配置和使用ActiveMQ,包括安装和启动服务、创建和管理消息队列、使用生产者和消费者发送与接收消息、理解不同消息模式的工作原理,以及如何利用ActiveMQ...
Spring Framework作为Java领域最广泛应用的轻量级框架之一,其丰富的模块化设计和强大的功能深受开发者喜爱。在这一版本4.3.4.RELEASE中,Spring JMS(Java Message Service)作为一个重要的组成部分,为开发者提供...
总的来说,基于JMS的消息系统为电力调度提供了高效的数据发布机制,能够应对大规模、高时效性的数据处理挑战,是保障电网稳定运行的重要技术之一。这份资料可能详细阐述了系统的设计原理、实现细节以及实际应用案例...
JMS的例子是学习和理解这一技术的关键,通过实际操作可以深入领会其工作原理和用法。 在“jmstest”这个压缩包中,我们可能找到一个简单的JMS应用实例。通常,这样的例子会包含生产者(Producer)、消费者...
- **Message**(消息):在JMS中,消息可以是以下几种类型之一: - **StreamMessage**:可以顺序读写不同类型的数据。 - **MapMessage**:类似Map结构,键为String类型,值为基本数据类型。 - **TextMessage**:...
在Java世界中,Spring框架是应用最广泛的轻量级开源框架之一,它为开发者提供了丰富的功能,包括数据访问、事务管理、AOP(面向切面编程)等。当我们谈论"Spring整合JMS"时,意味着我们要将Spring框架与Java消息服务...
例如,2018年的实验报告可能会讨论到如何使用某种中间件技术(如JMS或WebLogic)实现消息传递,或者如何在分布式环境下利用中间件进行事务处理。 复习资料《whut中间件复习资料.pdf》可能涵盖了中间件的核心概念、...