MQ的基本概念续。MQ的基本概念续。MQ的基本概念续。MQ的基本概念续。MQ的基本概念续。MQ的基本概念续。
9. 通道:
定义:一个通道为逻辑上的一个通信连接。在MQSeries中有两个不同类型的通道。
Ø 消息通道(Message Channels):通过消息通道代理(Message Channel Agents,MCAs)。消息通道连接两个队列管理器。这样的通道是单向的,它包括三个MCAs,一个发送方的,一个接受方的核通信协议。MCA是一个程序,这个程序将消息通过一个通信连接从传输队列传递到目标队列。为了进行双向通信,你必须定义包含发送方和接受方的一对通道。而MCA就作为搬运者的角色。
消息通道的分类:
发送通道(Sender)
接受通道(Receiver)
服务器通道(Server)
请求器通道(Requester)
集群发送通道(Cluster Sender)
集群接受通道(Cluster Receiver)
Ø MQI通道:消息队列接口(Message Queue Interface,MQI)通道用来连接MQSeries客户端和在服务器上的队列管理器。客户端在没有自己的队列管理器是可以使用这种方式。MQI通道是双向的。
下图显示了两种通道的作用:
上图表示了这两种通道的类型。你可以看到四台机器,两个客户端通过MQI通道连接到服务器机器,另外,通过两个单向的通道,这个服务器与另一个服务器连接。有些通道可以由MQSeries自动定义。使用什么类型的通道,取决于在队列管理器间的session是如何初始化的,以及使用它们的目标是什么。
为了适应传递非持久性的消息,消息通道可以运行在两种速率上,快速和一般。快速通道提高了性能,但是,非持久性消息在通道差的时候可能丢失。
一个通道可以使用下面的传输类型:SNA、LU6.2、TCP/IP、NetBIOS、SPX和DECNet。不是每个平台都支持上面的所有类型。
10. 消息队列:
队列被定义为属于队列管理器的对象。MQSeries能识别一些不同类型的队列,这些队列都有着特殊的用途,这些队肯能在你的本地机器上,也可能属于你所连接到的队列管理器,或者在你的服务器上(如果你是客户端)。下面详细说明不同类型的队列和他们的用途。
Ø 本地队列(Local Queue):如果一个队列属于应用程序所连接的队列管理器,这个队列是本地队列。本地队列可以用来为同一个队列管理器的程序存储信息。例如,程序A和程序B都有自己的用于发送和接收信息的队列。由于队列管理器服务于这些程序,所以这些队列都是本地的。
注意:两个程序不必再同一个工作站运行。客户端通常使用服务器上的队列管理器。
Ø 集群队列(Cluster Queue):集群队列是本地队列,它暴露于在这个集群中的所有队列管理器,也就是说,属于该集群的队列管理器可以不必远程定义通道就能发送到集群队列。
Ø 远程队列(Remote Queue):如果队列被另外的队列管理器所有,这个队列则为远程队列。远程队列定义指的是对远程队列的本地定义。远程队列不是一个实实在在的的队列,它是包含属于不同队列管理器的队列特性的结构体。程序开发者可以像使用本地队列一样,通过名字来使用远程队列。MQSeries管理器定义了队列的实际位置。一个远程队列与传输队列相关联。
注意:应用程序不可以从远程队列读取消息。对于集群队列而言,你不必进行远程队列定义。
Ø 传输队列(Transmisssion Queue):传输队列是有着特殊用途的本地队列。一个远程队列与一个传输队列相关联。当消息发送到属于另一个队列管理器的队列时,传输队列作为一个中间环节使用。
典型地,对每一个远程队列管理器(或机器)建立一个传输队列。所有要写入远程队列管理器的消息实际上都发送到传输队列中。消息将会从传输队列中读出然后发送到队列管理器。
Ø 动态队列(Dynamic Queue):动态队列在应用程序需要的时候被定义为"on the fly"。动态队列由队列管理器维持并且在程序退出时会被自动删除。动态队列是本地队列。动态队列用在对话型应用程序,用于存储中间结果。动态队列可以是:
ü 临时队列,在队列管理器重起后不能恢复。
ü 持久型队列,在队列管理器重启后可以恢复。
Ø 别名队列(Alias Queue):别名队列不是真实的队列而仅是一个定义。他们用来给相同的物理队列起不同的名字。这使得多个程序可以使用不同的名字,不同的属性来访问队列。
Ø 模板队列(Model Queue):模板队列不是一个真实的队列,它只是当动态队列创建的时候的一个属性集合。
Ø 启动队列(Initiation Queue):启动队列是一个本地队列。当某种条件在一个本地队列产生时,队列管理器会将触发消息放到启动队列中。例如,当消息放到一个空的队列或传输队列。这种触发消息对程序的启动是透明的。两个MQSeries程序监控启动队列和读取触发消息。触发起监控哪一个程序开始运行,即以哪个通道初始化器开始了两个队列管理器之间的消息发送。
注意:程序本身并不用关注启动队列,而在启动队列中所使用的触发机制是设计和编程的有力工具。
Ø 回复队列(Reply-to-Queue):一个请求消息必须给出响应程序将应答消息发送到的队列名字。也可以把这理解为给出返回地址,要将这个队列的名字以及拥有该队列的队列管理器的名字一起存储到消息的头部。
Ø 死信队列(Dead-Letter Queue):当一个队列管理器不能传输消息时,它必须能够处理这种情况。下面给出一些情景:
ü 目标队列已经满了
ü 目标队列不能退出
ü 目标队列被禁止接受消息
ü 发送方没被授权使用目标队列
ü 消息太长
ü 消息包含消息顺序号的副本
当以上情形中的一种或几种发生,那么消息就会被发送到死信队列中。死信队列是在队列管理器产生的时候就被定义好的。当消息不能传递时,死信队列作为这些消息的仓库。