MQ相关知识点

*****************************中间件简介:*****************************
中间件是介于应用软件与系统软件之间,一种以自己的复杂换取企业应用简单化的可复用基础软件。
三种通信技术:
1.CPI-C(同步,一定程度异步)
2.RPC
3.MQI(异步)
MQ基本由一个消息传输系统和一个应用程序接口组成,其资源是消息和队列(Messaging and Queuing)。
一个消息(Message)包含两个要素:消息描述(Message descriptor)和数据消息(Application data)。
应用程序接口API包含14个调用和两个关键动词(PUT、GET)。
MQ最基本而最重要的技术—可靠消息传输,事实上,MQ具有特殊的技术防止消息重复传送,确保消息
一次且仅一次(once-and-only-once)。
MQ当中对象名称区分大小写。

应用程序如何发送和接收消息?
应用程序使用MQI调用来实现发送和接收消息。 
例如,要将消息放入队列,应用程序: 
1.通过发出 MQI  MQOPEN 调用打开所需的队列 
2.发出 MQI  MQPUT 调用以将消息放入队列 
另一个应用程序可以通过发出MQI MQGET调用,从同一队列取出消息
有三种命令集合,可用于管理 WebSphere MQ,分别是控制命令、MQSC 命令和 PCF 命令。

***************************************************************************
MQ知识点:
注释:以下命令最好在Program Files\IBM\WebSphere MQ\bin目录下进行。
1.创建一个队列管理器:
命令:crtmqm -q venus.queue.manager(队列管理器名称)
2.启动一个队列管理器:
命令: amqmdain qmgr start venus.queue.manager(队列管理器名称)
      或 strmqm venus.queue.manager(队列管理器名称)
3.停止一个队列管理器:
命令: amqmdain qmgr end venus.queue.manager(队列管理器名称)
      或 end venus.queue.manager(队列管理器名称)
4.启用 MQSC 命令
命令:runmqsc venus.queue.manager(队列管理器名称)

示例如下:
E:\Program Files\IBM\WebSphere MQ\bin>runmqsc venus.queue.manager
5724-H72 (C) Copyright IBM Corp. 1994, 2005. ALL RIGHTS RESERVED.
启动队列管理器 venus.queue.manager 的 MQSC。

define qlocal(orange.queue)
     1 : define qlocal(orange.queue)
AMQ8006: WebSphere MQ 队列已创建。

       :
end
     2 : end
读取一个 MQSC 命令。
所有命令均无语法错误。
已处理所有的有效 MQSC 命令。

5.定义名为ORANGE.QUEUE的本地队列。
命令:define qlocal(orange.queue)
注:MQSC中的任何小写字母都将自动转换成大写,除非用单引号将它们括起来。这意味着如果用名称
orange.queue创建了队列,则记住在MQSC以外的其它命令中必须使用ORANGE.QUEUE。

6.停止MQSC
命令:end

7.测试安装:
要测试队列和队列管理器,需要使用样本程序amqsput(将消息放入队列)和amqsget(从队列获取消息)。
1)将消息放入队列
命令:amqsput ORANGE.QUEUE
显示以下消息:
    Sample AMQSPUT0 start
    target queue is ORANGE.QUEUE
在此输入"字符数据消息" :   

2)输入一些字符数据,然后按Enter键两次,显示以下消息:
    Sample AMQSPUT0 end

3)现在消息已经被放在队列当中,要想从队列获取消息
命令:amqsget ORANGE.QUEUE
在屏幕上将显示你刚才输入的字符数据消息。暂停后,例子程序结束。

以上步骤,示例如下:
E:\Program Files\IBM\WebSphere MQ\bin>amqsput ORANGE.QUEUE
Sample AMQSPUT0 start
target queue is ORANGE.QUEUE
测试成功

Sample AMQSPUT0 end

E:\Program Files\IBM\WebSphere MQ\bin>amqsget ORANGE.QUEUE
Sample AMQSGET0 start
message <测试成功>
no more messages
Sample AMQSGET0 end


删除队列管理器:
命令: dltmqm qm_apple


有效的 MQSC 命令是:
? help 
    ALTER
    CLEAR
    DEFINE
    DELETE
    DISPLAY
    END
    PING
    REFRESH
    RESET
    RESOLVE
    RESUME
    START
    STOP
    SUSPEND
END

查看现在MQ当中的队列管理器:
E:\Program Files\IBM\WebSphere MQ\bin>dspmq
QMNAME(QL_TEST)                                           STATUS(已正常结束)
QMNAME(QM_APPLE)                                          STATUS(已正常结束)
QMNAME(QM_EFSSV2_1002)                                    STATUS(已意外结束)
QMNAME(venus.queue.manager)                               STATUS(正在运行)

针对队列管理器的命令:
crtmqm 
dltmqm
strmqm
endmqm

MQSC模式下的命令:
runmqsc QMNAME
define ql(QNAME) //定义本地队列
    
    
针对队列的命令:

amqsput QNAME QMNAME
amqsget QNAME QMNAME


注:amqsget命令之后队列当中的信息会自动清除


************************************知识点:***************************************
定义队列:
在MQ当中定义队列可以使用以下方式:
1.在MQSC命令行中使用DEFINE(具体操作参照以上示例)
2.在程序中使用PCF创建队列命令
在定义队列时可以指定队列的类型和属性。例如,可以指定队列的最大队列深度、对大消息长度等。
一个队列管理器是MQ中的一个基本的独立的执行单元。任何需要访问MQ提供的服务的应用程序
都必须先和队列管理器相连,和应用程序相连的队列管理器对该应用程序而言就叫"本地队列管理器"
(Local Queue Manager),本地队列管理器为程序提供MQI调用的支持。

消息通道(Message channels)
消息通道是一种提供从一个队列管理器到另一个队列管理器的通信路径。
消息通道用在分布式的队列把消息从一个队列管理器发行到另一个队列管理器。
使应用程序屏蔽了底层的通信协议。
为了实现队列管理器之间的通信,您必需在一个队列管理器中定义一个发送消息的通道对象,
在另一个队列管理器中定义一个接收消息的通道对象。消息通道是一个单向链接。
MQ通过消息通道代理(message channel agents)把两个队列管理器连接起来。
消息通道分类:
根据消息通道的定义可以分为以下6种类型:
1.发送通道(Sender)
2.接收通道(Receiver)
3.服务器通道(Server)
4.请求器通道(Requester)
5.群集发送通道(Cluster sender)
6.群集接收通道(Cluster receiver)

消息通道的组合形式
如果要在队列管理之间实现消息传输,必须要在两个队列管理器上都要定义相应的通道。发送方和接收方通道的组合形式如下:

1.发送通道-接收通道(Sender-receiver )
2.请求器通道-服务器通道(Requester-server)
3.请求器通道-发送通道(Requester-sender (callback) )
4.服务器通道-接收通道(Server-receiver )
5.群集发送通道-群集接收通道(Cluster sender –cluster receiver)

注意:通道的组合形式有5种形式,每种组合方式是固定的,用户不能随意组合。每对通道的名称必需相同例如:
在发送通道-接收通道组合中,发送通道名和接收通道名必须一致,否则通道将无法启动。

消息通道用法:
1.发送通道-接收通道(Sender-receiver)
用法:由一个系统的发送通道来启动通道,以便它可以发送消息到另一个系统。发送通道向接收通道发送启动请求。
发送通道从传输队列发送消息到接收通道。接收通道把消息放到目标队列。

2.请求器通道-服务器通道(Requester-server)
用法:
1)由一个系统中的请求器通道来启动通道,以便它能从另一个系统接收到消息。 
   请求器通道向通道另一端的服务器通道发送请求来启动。服务器通道从传输队列把消息发送到请求器通道。
2)服务器通道也能启动通道,并发送消息到请求器, 但这仅应用于完全意义的服务器通道, 
   也即服务器通道定义中应含有对方的连接名。一个完全意义的服务器通道可以由请求器通道启动, 
   也可以发起和服务器通道的通讯。
3)最好不要手工去停止Server和Request通道,而是依靠Server通道的Discint的属性来停止通道。

3.请求器通道-发送通道(Requester-sender (callback))
用法:
请求器通道启动通道,发送通道终止这个会话。 发送通道然后依据它的通道定义中的信息(称为 callback)
来重新启动会话。它把消息从传输队列发送给请求器通道。最好不要手工去停止Sender和Request通道,
而是依靠Sender 通道的Discint属性来停止通道。

4.服务器通道-接收通道(Server-receiver)
用法:
类似于发送通道-接收通道,但仅应用在完全意义的服务器通道。也即服务器通道定义应含有对方的连接名,
通道的启动方是服务器通道。

5.群集发送通道(Cluster sender)
用法:
在一个群集中,每个队列管理器都有一个群集发送通道,通过它可以把送群集信息发送到其中一个队列管理器资源管理器。 
队列管理器通过这个通道也可以把消息发送到其他的队列管理器。

6.群集接收通道(cluster receiver)
功能:
在一个群集中,每一个队列管理器都有一个群集接收通道。通过这个通道可以接收数据消息和关于群集的消息。


MQI(messge queue interface消息队列接口)通道
MQI通道是WebSphere MQ 客户端和服务器上的队列管理器的通信的通道。当客户端应用程序发出MQCONN或MQCONNX调用时,
才开始建立连接。它是一个双向的通道,可以负责发送和接收,被用作MQI调用的传送和响应。
一个MQI通道可以把一个客户端连接到单个队列管理器,MQI通道有两种类型,它们定义了双向的MQI通道。

1.客户器连接通道(Client-connection channel)
  这种类型为WebSphere MQ 的客户端所使用。
2.服务器连接通道(Server-connection channel)
  这种类型为运行队列管理器的服务器端所使用,运行在WebSphere MQ 客户端的应用程序将使用这种通道进行通信。

比较消息通道和MQI通道
消息通道与MQI通道之间的区别可以从两方面进行比较:
1.MQI通道是双向的:一个MQI通道可以被用来发送请求,也可用来接收响应。而消息通道则只能单向数据通信。
  如果要在两个队列管理器之间实现双向通信,那么需要定义两个消息通道,一个用来实现数据的发送,
  另一个用来实现数据的接收。
2.MQI通道的通信是同步的:当一个MQI请求从客户端发送服务器端时,WebSphere MQ的客户端在发送下一个
  请求之间必须要等待来自服务器端的响应。而消息通道,在通道中传输的消息是与时间无关的。
  大量的消息可以从一个队列管理器发送到另一个队列管理器,发送队列管理器不必等待来自接收队列管理器的任何响应。

如果队列管理器需要将消息发送到另一个队列管理器,则它必须定义一个传输队列、一个到远程队列管理器的通道,
以及它要将消息发送到的每个队列的远程队列定义。


messge queue interface消息队列接口(MQI)有下列组成部分:
1.函数接口:应用程序通过函数可以访问队列管理器和它的部件。
2.数据结构:应用程序使用提供的数据接口来是实现把数据传递给队列管理器,或从队列管理器中获得数据。
3.基本数据类型:也是用来实现从队列管理器传递数据,或从队列管理器中获得数据。


WebSphere MQ 服务器是为一个或多个客户机提供排队服务的队列管理器(消息驱动)。
在 WebSphere MQ 中,认为是本地管理,因为没有通道定义,它们之间的通信是由操作系统提供的。

WebSphere MQ 对象的命名规则
WebSphere MQ 队列、进程、名称列表、通道和存储类对象存在于各自独立的对象名字空间中,
因此不同类型的对象可以有相同的名称。但是,同一类型中的对象不能同名。
(例如,本地队列不能和模型队列有相同的名称。)WebSphere MQ 中的名称都区分大小写;
住不包含在引号中的小写字符都将转换为大写。 

MQ控制命令:
命令名     目的 
amqmcert     管理 SSL 证书 
amqmdain     配置或控制 WebSphere MQ 服务(仅 Windows 系统) 
crtmqcvx     转换数据 
crtmqm       创建本地队列管理器 
dltmqm       删除队列管理器 
dmpmqaut     转储打开对象的权限 
dmpmqlog     转储日志 
dspmq       显示队列管理器 
dspmqaut     显示打开对象的权限 
dmpmqcap     显示处理程序容量和处理程序数 
dspmqcsv     显示命令服务器状态 
dspmqfls     显示文件名 
dspmqtrc     显示格式化跟踪输出(HP-UX、Linux 和 Solaris) 
dspmqrtn     显示事务的详细信息 
endmqcsv     停止队列管理器上的命令服务器 
endmqlsr     停止队列管理器上的侦听器进程 
endmqm       停止本地队列管理器 
endmqtrc     停止对实体的跟踪(不用于 AIX) 
rcdmqimg     向日志写对象的映象 
rcrmqobj     根据它们在日志中的映象重新创建一个对象 
rsvmqtrn     提交或逆序恢复事务 
runmqchi     启动通道启动器进程 
runmqchl     启动发送方或请求者通道 
runmqdlq     启动死信队列处理程序 
runmqlsr     启动侦听器进程 
runmqsc     向队列管理器发出 MQSC 命令 
runmqtmc     调用客户机的触发器监控器(仅 AIX 客户机) 
runmqtrm     调用服务器的触发器监控器 
setmqaut     更改打开对象的权限 
setmqcap     设置处理程序容量 
setmqcrl     设置证书撤销列表(CRL)服务器定义 
setmqscp     设置服务连接点(仅 Windows 系统) 
strmqcsv     启动队列管理器的命令服务器 
strmqm       启动本地队列管理器 
strmqtrc     启用跟踪(不用于 AIX) 


组件定义:
消息通道代理(MCA Message Channel Agent):负责发送和接收的软件
通道(Channel):消息是通过通道在队列管理器之间进行传输。通道是一条两个队列管理器之间的通信链路。

发送消息所需要的组件:
    如果要把消息发送到远程队列管理器中,那么本地队列管理器需要定义一个传输队列和一个通道。
    通道的两端都需要分别定义,例如,发送端或接收端。
    一个简单通道是由本地队列管理器一个发送通道和远程队列管理器一个接收通道所组成的。
    这两个定义必须是相同的名字,并共同构成一个通道。
每一队列管理器都应该有一个死信队列(dead-letter queue),也叫做不能交付的消息队列(undelivered message queue)。
如果消息不能到达目的队列,则将被放置到死信队列。

MQ集群:
与传统的WebSphere MQ 网络相比的另一种网络是群集。支持群集的版本有 WebSphere MQ for AIX, iSeries, 
HP-UX, Solaris, z/OS,and Windows, WebSphere MQ V5.1 for Compaq Tru64 UNIX, 和 OS/2 Warp ,
群集是由具有逻辑关系的队列管理器所组成的网络。集群中的任何队列管理器可以发送消息到同一集群其他队列管理器,
而不需要显示地定义通道、远程队列和与目标相对应的传输队列。在群集中的每个队列管理器只有一个传输队列来
负责把消息发送到群集中的其他队列管理器。每个队列管理器只需要一个cluster-receiver通道和一个 cluster-sender通道。
*******您可以使用MQPUT调用把消息发送到任何其他队列管理器,但是只可以使用MQGET 调用从本地队列中检索消息********

传输队列是一个特殊的本地队列,它是用来存放将被发送到远程队列管理器的消息的队列。

MQ侦听程序配置和启动方式:
MQ的侦听程序有两种配置和启动方式,一种是通过配置/etc/inetd.conf文件选择使用inetd方式, 
也可以使用MQ自身提供的runmqlsr程序,所不同的是:runmqlsr 是一个线程应用,所以比inetd需要更少的内存消耗。
因此,采用runmqlsr方式可以提高通道相关的性能。与MQ应用程序类似,MQ的通道侦听程序也有trusted(fastpath)
和non trusted(standard)两种运行方式,采用trusted运行方式可以降低CPU和内存消耗。
将通道和侦听程序设置为trusted方式运行的方法是通过修改qm.ini配置文件中的MQIBindType参数来实现,
即创建或修改qm.ini文件中与Channels相关的小节,
例如:
Channels:
MQIBindType=FASTPATH 或者
MQIBindType=STANDARD 
其中,FASTPATH表示trusted运行方式,而STANDARD表示非trusted运行方式。

猜你喜欢

转载自blog.csdn.net/m0_37604866/article/details/89191391