消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。经过消息队列,应用程序可独立地执行--它们不须要知道彼此的位置、或在继续执行前不须要等待接收程序接收此消息。git
消息中间件概述编程
消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。经过消息队列,应用程序可独立地执行--它们不须要知道彼此的位置、或在继续执行前不须要等待接收程序接收此消息。安全
在分布式计算环境中,为了集成分布式应用,开发者须要对异构网络环境下的分布式应用提供有效的通讯手段。为了管理须要共享的信息,对应用提供公共的信息交换机制是重要的。服务器
设计分布式应用的方法主要有:远程过程调用(PRC)--分布式计算环境(DCE)的基础标准成分之一;对象事务监控(OTM)--基于CORBA的面向对象工业标准与事务处理(TP)监控技术的组合;消息队列(MessageQueue)--构造分布式应用的松耦合方法。网络
(a) 分布计算环境/远程过程调用 (DCE/RPC)负载均衡
RPC是DCE的成分,是一个由开放软件基金会(OSF)发布的应用集成的软件标准。RPC模仿一个程序用函数引用来引用另外一程序的传统程序设计方法,此引用是过程调用的形式,一旦被调用,程序的控制则转向被调用程序。异步
在RPC实现时,被调用过程可在本地或远地的另外一系统中驻留并在执行。当被调用程序完成处理输入数据,结果放在过程调用的返回变量中返回到调用程序。RPC完成后程序控制则当即返回到调用程序。所以RPC模仿子程序的调用/返回结构,它仅提供了Client(调用程序)和Server(被调用过程)间的同步数据交换。socket
(b) 对象事务监控 (OTM)tcp
基于CORBA的面向对象工业标准与事务处理(TP)监控技术的组合,在CORBA规范中定义了:使用面向对象技术和方法的体系结构;公共的Client/Server程序设计接口;多平台间传输和翻译数据的指导方针;开发分布式应用接口的语言(IDL)等,并为构造分布的Client/Server应用提供了普遍及一致的模式。分布式
(c) 消息队列 (Message Queue)
消息队列为构造以同步或异步方式实现的分布式应用提供了松耦合方法。消息队列的API调用被嵌入到新的或现存的应用中,经过消息发送到内存或基于磁盘的队列或从它读出而提供信息交换。消息队列可用在应用中以执行多种功能,好比要求服务、交换信息或异步处理等。
中间件是一种独立的系统软件或服务程序,分布式应用系统借助这种软件在不一样的技术之间共享资源,管理计算资源和网络通信。它在计算机系统中是一个关键软件,它能实现应用的互连和互操做性,能保证系统的安全、可靠、高效的运行。中间件位于用户应用和操做系统及网络软件之间,它为应用提供了公用的通讯手段,而且独立于网络和操做系统。中间件为开发者提供了公用于全部环境的应用程序接口,当应用程序中嵌入其函数调用,它即可利用其运行的特定操做系统和网络环境的功能,为应用执行通讯功能。
若是没有消息中间件完成信息交换,应用开发者为了传输数据,必需要学会如何用网络和操做系统软件的功能,编写相应的应用程序来发送和接收信息,且交换信息没有标准方法,每一个应用必须进行特定的编程从而和多平台、不一样环境下的一个或多个应用通讯。例如,为了实现网络上不一样主机系统间的通讯,将要求具有在网络上如何交换信息的知识(好比用TCP/IP的socket程序设计);为了实现同一主机内不一样进程之间的通信,将要求具有操做系统的消息队列或命名管道(Pipes)等知识。
目前中间件的种类不少,如交易管理中间件(如IBM的CICS)、面向Java应用的Web应用服务器中间件(如IBM的WebSphere Application Server)等,而消息传输中间件(MOM)是其中的一种。它简化了应用之间数据的传输,屏蔽底层异构操做系统和网络平台,提供一致的通信标准和应用开发,确保分布式计算网络环境下可靠的、跨平台的信息传输和数据交换。它基于消息队列的存储-转发机制,并提供特有的异步传输机制,可以基于消息传输和异步事务处理实现应用整合与数据交换。
IBM 消息中间件MQ以其独特的安全机制、简便快速的编程风格、卓越不凡的稳定性、可扩展性和跨平台性,以及强大的事务处理能力和消息通信能力,成为业界市场占有率最高的消息中间件产品。
MQ具备强大的跨平台性,它支持的平台数多达35种。它支持各类主流Unix操做系统平台,如:HP-UX、AIX、SUN Solaris、Digital UNIX、Open VMX、SUNOS、NCR UNIX;支持各类主机平台,如:OS/390、MVS/ESA、VSE/ESA;一样支持Windows NT服务器。在PC平台上支持Windows9X/Windows NT/Windows 2000和UNIX (UnixWare、Solaris)以及主要的Linux版本(Redhat、TurboLinux等)。此外,MQ还支持其余各类操做系统平台,如:OS/二、AS/400、Sequent DYNIX、SCO OpenServer、SCO UnixWare、Tandem等。
MQ的基本概念:
1) 队列管理器
队列管理器是MQ系统中最上层的一个概念,由它为咱们提供基于队列的消息服务。
2) 消息
在MQ中,咱们把应用程序交由MQ传输的数据定义为消息,咱们能够定义消息的内容并对消息进行广义的理解,好比:用户的各类类型的数据文件,某个应用向其它应用发出的处理请求等均可以做为消息。消息有两部分组成:
消息描述符(Message Discription或Message Header),描述消息的特征,如:消息的优先级、生命周期、消息Id等;
消息体(Message Body),即用户数据部分。在MQ中,消息分为两种类型,非永久性(non-persistent)消息和永久性(persistent)消息,非永久性消息是存储在内存中的,它是为了提升性能而设计的,当系统掉电或MQ队列管理器从新启动时,将不可恢复。当用户对消息的可靠性要求不高,而侧重系统的性能表现时,能够采用该种类型的消息,如:当发布股票信息时,因为股票信息是不断更新的,咱们可能每若干秒就会发布一次,新的消息会不断覆盖旧的消息。永久性消息是存储在硬盘上,而且纪录数据日志的,它具备高可靠性,在网络和系统发生故障等状况下都能确保消息不丢、不重。
此外,在MQ中,还有逻辑消息和物理消息的概念。利用逻辑消息和物理消息,咱们能够将大消息进行分段处理,也能够将若干个自己完整的消息在应用逻辑上归为一组进行处理。
3) 队列
队列是消息的安全存放地,队列存储消息直到它被应用程序处理。
消息队列如下述方式工做:
a) 程序A造成对消息队列系统的调用,此调用告知消息队列系统,消息准备好了投向程序B;
b) 消息队列系统发送此消息到程序B驻留处的系统,并将它放到程序B的队列中;
c) 适当时间后,程序B从它的队列中读此消息,并处理此信息。
因为采用了先进的程序设计思想以及内部工做机制,MQ可以在各类网络条件下保证消息的可靠传递,能够克服网络线路质量差或不稳定的现状,在传输过程当中,若是通讯线路出现故障或远端的主机发生故障,本地的应用程序都不会受到影响,能够继续发送数据,而无需等待网络故障恢复或远端主机正常后再从新运行。
在MQ中,队列分为不少种类型,其中包括:本地队列、远程队列、模板队列、动态队列、别名队列等。
本地队列又分为普通本地队列和传输队列,普通本地队列是应用程序经过API对其进行读写操做的队列;传输队列能够理解为存储-转发队列,好比:咱们将某个消息交给MQ系统发送到远程主机,而此时网络发生故障,MQ将把消息放在传输队列中暂存,当网络恢复时,再发往远端目的地。
远程队列是目的队列在本地的定义,它相似一个地址指针,指向远程主机上的某个目的队列,它仅仅是个定义,不真正占用磁盘存储空间。
模板队列和动态队列是MQ的一个特点,它的一个典型用途是用做系统的可扩展性考虑。咱们能够建立一个模板队列,当从此须要新增队列时,每打开一个模板队列,MQ便会自动生成一个动态队列,咱们还能够指定该动态队列为临时队列或者是永久队列,若为临时队列咱们能够在关闭它的同时将它删除,相反,若为永久队列,咱们能够将它永久保留,为我所用。
4) 通道
通道是MQ系统中队列管理器之间传递消息的管道,它是创建在物理的网络链接之上的一个逻辑概念,也是MQ产品的精华。
在MQ中,主要有三大类通道类型,即消息通道,MQI通道和Cluster通道。消息通道是用于在MQ的服务器和服务器之间传输消息的,须要强调指出的是,该通道是单向的,它又有发送(sender), 接收(receive), 请求者(requestor), 服务者(server)等不一样类型,供用户在不一样状况下使用。MQI通道是MQ Client和MQI通道是MQ Client和MQ Server之间通信和传输消息用的,与消息通道不一样,它的传输是双向的。群集(Cluster)通道是位于同一个MQ 群集内部的队列管理器之间通信使用的。