`

消息队列技术的介绍和原理(MQ)

阅读更多

    消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。

 

消息中间件概述

消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。

 

在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的。

 

设计分布式应用的方法主要有:远程过程调用(PRC)--分布式计算环境(DCE)的基础标准成分之一;对象事务监控(OTM)--基于CORBA的面向对象工业标准与事务处理(TP)监控技术的组合;消息队列(MessageQueue)--构造分布式应用的松耦合方法。

 

 

(a) 分布计算环境/远程过程调用 (DCE/RPC)

RPCDCE的成分,是一个由开放软件基金会(OSF)发布的应用集成的软件标准。RPC模仿一个程序用函数引用来引用另一程序的传统程序设计方法,此引用是过程调用的形式,一旦被调用,程序的控制则转向被调用程序。

 

RPC实现时,被调用过程可在本地或远地的另一系统中驻留并在执行。当被调用程序完成处理输入数据,结果放在过程调用的返回变量中返回到调用程序。RPC完成后程序控制则立即返回到调用程序。因此RPC模仿子程序的调用/返回结构,它仅提供了Client(调用程序)Server(被调用过程)间的同步数据交换。

 

 

(b) 对象事务监控 (OTM)

基于CORBA的面向对象工业标准与事务处理(TP)监控技术的组合,在CORBA规范中定义了:使用面向对象技术和方法的体系结构;公共的Client/Server程序设计接口;多平台间传输和翻译数据的指导方针;开发分布式应用接口的语言(IDL)等,并为构造分布的Client/Server应用提供了广泛及一致的模式。

 

 

(c) 消息队列 (Message Queue)

消息队列为构造以同步或异步方式实现的分布式应用提供了松耦合方法。消息队列的API调用被嵌入到新的或现存的应用中,通过消息发送到内存或基于磁盘的队列或从它读出而提供信息交换。消息队列可用在应用中以执行多种功能,比如要求服务、交换信息或异步处理等。

 

中间件是一种独立的系统软件或服务程序,分布式应用系统借助这种软件在不同的技术之间共享资源,管理计算资源和网络通讯。它在计算机系统中是一个关键软件,它能实现应用的互连和互操作性,能保证系统的安全、可靠、高效的运行。中间件位于用户应用和操作系统及网络软件之间,它为应用提供了公用的通信手段,并且独立于网络和操作系统。中间件为开发者提供了公用于所有环境的应用程序接口,当应用程序中嵌入其函数调用,它便可利用其运行的特定操作系统和网络环境的功能,为应用执行通信功能。

 

如果没有消息中间件完成信息交换,应用开发者为了传输数据,必须要学会如何用网络和操作系统软件的功能,编写相应的应用程序来发送和接收信息,且交换信息没有标准方法,每个应用必须进行特定的编程从而和多平台、不同环境下的一个或多个应用通信。例如,为了实现网络上不同主机系统间的通信,将要求具备在网络上如何交换信息的知识(比如用TCP/IPsocket程序设计);为了实现同一主机内不同进程之间的通讯,将要求具备操作系统的消息队列或命名管道(Pipes)等知识。

 

目前中间件的种类很多,如交易管理中间件(IBMCICS)、面向Java应用的Web应用服务器中间件(IBMWebSphere Application Server)等,而消息传输中间件(MOM)是其中的一种。它简化了应用之间数据的传输,屏蔽底层异构操作系统和网络平台,提供一致的通讯标准和应用开发,确保分布式计算网络环境下可靠的、跨平台的信息传输和数据交换。它基于消息队列的存储-转发机制,并提供特有的异步传输机制,能够基于消息传输和异步事务处理实现应用整合与数据交换。

 

IBM 消息中间件MQ以其独特的安全机制、简便快速的编程风格、卓越不凡的稳定性、可扩展性和跨平台性,以及强大的事务处理能力和消息通讯能力,成为业界市场占有率最高的消息中间件产品。

 

MQ具有强大的跨平台性,它支持的平台数多达35种。它支持各种主流Unix操作系统平台,如:HP-UXAIXSUN SolarisDigital UNIXOpen VMXSUNOSNCR UNIX;支持各种主机平台,如:OS/390MVS/ESAVSE/ESA;同样支持Windows NT服务器。在PC平台上支持Windows9X/Windows NT/Windows 2000UNIX (UnixWareSolaris)以及主要的Linux版本(RedhatTurboLinux)。此外,MQ还支持其他各种操作系统平台,如:OS/2AS/400Sequent DYNIXSCO OpenServerSCO UnixWareTandem等。

 

 

MQ的基本概念:

 

 

 

1) 队列管理器

队列管理器是MQ系统中最上层的一个概念,由它为我们提供基于队列的消息服务。

 

2) 消息

MQ中,我们把应用程序交由MQ传输的数据定义为消息,我们可以定义消息的内容并对消息进行广义的理解,比如:用户的各种类型的数据文件,某个应用向其它应用发出的处理请求等都可以作为消息。消息有两部分组成:

 

消息描述符(Message DiscriptionMessage 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

  • PIC.zip (9.7 KB)
  • 下载次数: 103
分享到:
评论
1 楼 huangtut 2008-12-04  
MQI通道是MQ Client和MQ Server之间通讯和传输消息用的,与消息通道不同,它的传输是双向的。群集(Cluster)通道是位于同一个MQ 群集内部的队列管理器之间通讯使用的。
 

MQ的工作原理(图见附件)

首先来看本地通讯的情况,应用程序A和应用程序B运行于同一系统A,它们之间可以借助消息队列技术进行彼此的通讯:应用程序A向队列1发送一条信息,而当应用程序B需要时就可以得到该信息。

其次是远程通讯的情况,如果信息传输的目标改为在系统B上的应用程序C,这种变化不会对应用程序A产生影响,应用程序A向队列2发送一条信息,系统A的MQ发现Q2所指向的目的队列实际上位于系统B,它将信息放到本地的一个特殊队列-传输队列(Transmission Queue)。我们建立一条从系统A到系统B的消息通道,消息通道代理将从传输队列中读取消息,并传递这条信息到系统B,然后等待确认。只有MQ接到系统B成功收到信息的确认之后,它才从传输队列中真正将该信息删除。如果通讯线路不通,或系统B不在运行,信息会留在传输队列中,直到被成功地传送到目的地。这是MQ最基本而最重要的技术--确保信息传输,并且是一次且仅一次(once-and-only-once)的传递。

MQ提供了用于应用集成的松耦合的连接方法,因为共享信息的应用不需要知道彼此物理位置(网络地址);不需要知道彼此间怎样建立通信;不需要同时处于运行状态;不需要在同样的操作系统或网络环境下运行。

MQ的基本配置举例


在上图中,要实现网络上两台主机上的通讯,若采用点对点的通讯方式,我们至少要建立如下MQ的对象:

在发送方A:

1) 建立队列管理器QMA: crtmqm -q QMA

2) 定义本地传输队列: define qlocal (QMB) usage (xmitq) defpsist(yes)

3) 创建远程队列: define qremote (QR.TOB) rname (LQB) rqmname (QMB) xmitq (QMB)

4) 定义发送通道: define channel (A.TO.B) chltype (sdr) conname ('IP of B') xmitq (QMB) + trptype (tcp)

在接收方B:

1) 建立队列管理器QMB: crtmqm -q QMB

2) 定义本地队列QLB: define qlocal (LQB)

3) 创建接收通道: define channel (A.TO.B) chltype (rcvr) trptype (tcp)

经过上述配置,我们就可以实现从主机A到B的单向通讯,若要实现二者之间的双向通讯,可参考此例创建所需要的MQ对象。

MQ的通讯模式


1) 点对点通讯:点对点方式是最为传统和常见的通讯方式,它支持一对一、一对多、多对多、多对一等多种配置方式,支持树状、网状等多种拓扑结构。

2) 多点广播:MQ适用于不同类型的应用。其中重要的,也是正在发展中的是"多点广播"应用,即能够将消息发送到多个目标站点(Destination List)。可以使用一条MQ指令将单一消息发送到多个目标站点,并确保为每一站点可靠地提供信息。MQ不仅提供了多点广播的功能,而且还拥有智能消息分发功能,在将一条消息发送到同一系统上的多个用户时,MQ将消息的一个复制版本和该系统上接收者的名单发送到目标MQ系统。目标MQ系统在本地复制这些消息,并将它们发送到名单上的队列,从而尽可能减少网络的传输量。

3) 发布/订阅(Publish/Subscribe)模式:发布/订阅功能使消息的分发可以突破目的队列地理指向的限制,使消息按照特定的主题甚至内容进行分发,用户或应用程序可以根据主题或内容接收到所需要的消息。发布/订阅功能使得发送者和接收者之间的耦合关系变得更为松散,发送者不必关心接收者的目的地址,而接收者也不必关心消息的发送地址,而只是根据消息的主题进行消息的收发。在MQ家族产品中,MQ Event Broker是专门用于使用发布/订阅技术进行数据通讯的产品,它支持基于队列和直接基于TCP/IP两种方式的发布和订阅。

4) 群集(Cluster):为了简化点对点通讯模式中的系统配置,MQ提供Cluster(群集)的解决方案。群集类似于一个域(Domain),群集内部的队列管理器之间通讯时,不需要两两之间建立消息通道,而是采用群集(Cluster)通道与其它成员通讯,从而大大简化了系统配置。此外,群集中的队列管理器之间能够自动进行负载均衡,当某一队列管理器出现故障时,其它队列管理器可以接管它的工作,从而大大提高系统的高可靠性。

相关推荐

    Delphi向MQ远程队列发送消息

    在IT行业中,消息队列(Message Queue)是一种重要的中间件技术,用于应用程序之间的异步通信。IBM WebSphere MQ,作为业界广泛使用的消息中间件,提供可靠的消息传递服务,确保数据在分布式系统中的安全传输。本篇...

    IBMMQ消息队列整合

    通过以上知识点的详细介绍,我们可以看到IBM MQ与Java技术相结合后的强大功能,包括但不限于消息的发送与接收、队列管理器和队列的创建、服务器连接通道的配置等。这些知识点对于深入理解IBM MQ的工作原理以及如何在...

    MQ消息队列

    在信息技术领域,消息队列(Message Queue,简称MQ)是一种重要的中间件技术,它在分布式系统中起到了桥梁的作用,帮助各个组件之间进行异步通信和解耦。本文将深入探讨MQ消息队列的核心概念、工作原理、应用场景...

    阿里云 专有云Enterprise版 消息队列MQ专业版 V3.1.0 技术白皮书 20171129.pdf

    本文档详细介绍了消息队列MQ专业版的技术架构、功能特点、实现原理、应用场景等方面的内容。 法律声明 在阅读或使用本文档之前,用户应当仔细阅读、充分理解本法律声明各条款的内容。本文档的内容视为阿里云的保密...

    分布式架构和消息队列技术在抄表系统的应用.pdf

    《分布式架构和消息队列技术在抄表系统的应用》这篇文献主要探讨了在电力与能源领域,如何利用分布式系统原理和消息队列技术改进抄表系统,以应对日益复杂和庞大的系统需求。文章作者李朋来自上海明华电力技术工程...

    1 消息队列MQ+多线程任务+业务处理

    在IT行业中,消息队列(Message Queue,简称MQ)是一种重要的中间件技术,它主要用于解耦应用程序的不同组件,实现异步通信,提高系统的响应速度和并发能力。在结合多线程任务和业务处理的场景下,MQ能发挥出更大的...

    阿里云 专有云Enterprise版 消息队列MQ铂金版 V3.3.0 用户指南 20180312.pdf

    消息队列MQ铂金版的工作原理是基于云计算的,用户可以通过云计算平台提供的API或SDK来使用消息队列服务。用户可以将消息发送到消息队列,然后消息队列将消息分发给相应的消费者。 消息队列的配置 消息队列MQ铂金版...

    阿里云 专有云企业版 V3.8.0 消息队列 MQ 技术白皮书 20190621.pdf

    综上所述,阿里云专有云企业版V3.8.0的消息队列MQ技术白皮书是企业级用户理解和使用MQ服务的重要参考资料,涵盖了产品设计原理、使用场景、架构细节和技术特性等多个方面,为企业构建高效、可靠的分布式系统提供了...

    消息队列.zip

    消息队列(Message Queue, MQ)是分布式系统中常用的一种技术,用于在不同组件之间传递数据或事件。它的核心思想是:生产者将消息发送到队列,而消费者则从队列中取出并处理这些消息。这种设计使得系统能够以较低的...

    WebSphere MQ工作原理

    消息中间件是分布式应用系统中的关键软件,消息队列技术是消息中间件的一种实现方式,WebSphere MQ 是一种业界领先的消息中间件产品,它具有强大的跨平台性、简便快速的编程风格、卓越不凡的稳定性、可扩展性和跨...

    阿里云 专有云企业版 V3.9.0 消息队列 MQ 技术白皮书 20191017.pdf

    总体来说,阿里云专有云企业版V3.9.0消息队列MQ技术白皮书是企业理解和使用阿里云MQ服务的关键参考资料,涵盖了从产品原理到实际操作的全方位指导,为企业构建高效率、高可靠的分布式系统提供了有力的支持。

    C# 消息队列.zip

    在IT行业中,消息队列(Message Queue)是一种用于...通过理解和掌握消息队列的原理和C#中的实现方式,开发者可以设计出更健壮、可扩展的系统。结合多线程技术,能进一步优化性能,实现并行处理,确保系统的高效运行。

    消息队列代码.rar

    消息队列(Message Queue,简称MQ)是一种在分布式系统中用于异步处理和解耦的软件组件。在本文中,我们将深入探讨消息队列的概念、工作原理以及如何通过代码实现来提升系统的性能和可扩展性。 消息队列的核心概念...

    消息队列的简单讲解

    消息队列,也被称为MQ(Message Queue),是分布式系统中常用的一种中间件技术,用于解耦应用程序的不同组件,提高系统的可扩展性和容错性。在Java开发中,消息队列的使用尤为广泛,因为它能够帮助处理高并发场景下...

    windows消息队列基本操作实例

    消息队列的工作原理是:发送方将消息放入队列,接收方在准备好时从队列中取出并处理消息。这使得应用程序可以在不同时间运行,甚至在不同的网络环境中运行,而不会影响消息的传递。 **2. 创建消息队列** 创建消息...

    msmq.rar_java msmq_java 消息队列_java消息队列_msmq_消息队列

    Java MSMQ(Message Queuing)是Java编程中用于实现异步通信的一种技术,它基于微软的MSMQ(Microsoft Message Queue)服务。...通过理解消息队列的工作原理和Java中的API,你可以构建出高效、可靠的分布式系统。

    阿里云 专有云企业版 V3.5.2 消息队列MQ铂金版 技术白皮书 - 20180831.pdf

    本技术白皮书旨在介绍阿里云专有云企业版消息队列MQ铂金版的技术细节和实现原理。下面是本白皮书的主要知识点: 1.法律声明:阿里云提醒用户在阅读或使用本文档之前仔细阅读、充分理解本法律声明各条款的内容。如果...

    消息队列中间件的设计与实现

    本文介绍了一种新型消息队列服务系统的设计与实现方法。该方案解决了现有消息队列服务系统中的一些关键问题,包括消息大小的限制、操作系统兼容性、消息传递可靠性以及用户API接口的灵活性等。此外,还提供了通过...

Global site tag (gtag.js) - Google Analytics