与 IBM MQ 的互操作:关键 IBM MQ 概念
如果您不熟悉 IBM MQ 基本概念,请阅读 IBM MQ 中对于与 WebSphere® Application Server 互操作很重要的对象的信息。
队列和主题
队列是用来存储消息的数据结构。应用程序可以使用 JMS 或者 IBM MQ API 调用将消息放在 IBM MQ 队列上。其他应用程序可以从队列中获取消息。
主题是在发布/预订消息中发布的信息的主体集。应用程序可以将消息发布到主题,而不用将消息放在特定队列上。其他应用程序通过预订主题以接收发布到该主题的所有消息来获取消息。
当应用程序将消息放在队列上时,仅存在该消息的一个副本。即使多个应用程序可以从队列中获取消息,也只有一个使用者可以接收每条消息。但是,当应用程序将消息发布到主题时,任意数目的订户都可以接收该消息的副本。
队列管理器和队列共享组
每个 IBM MQ 队列都归队列管理器所有。队列管理器负责维护它拥有的队列,并将它接收到的所有消息放在适当的队列上。当应用程序想要将消息放在队列上时,它们将连接至队列管理器。队列管理器还可以通过正常操作将消息放在队列上。
从 IBM MQ V7 开始,队列管理器还拥有 IBM MQ 中的每个主题。队列管理器从发布者接收消息,从订户接收预订。队列管理器负责将已发布的消息传递到已在消息的主题中表明感兴趣的订户。在先前版本的 IBM MQ 中,由发布/预订代理而不是由队列管理器来处理发布/预订消息传递。
在 IBM MQ for z/OS® 中,您可以设置可供综合系统中的若干队列管理器访问的共享队列。放在共享队列中的消息以列表结构存储在 zSeries Coupling Facility 中,大型消息将它们的消息数据保留在共享 DB2® 表中。
可以访问同一组共享队列的队列管理器将组成一个称为队列共享组的组。队列共享组中的每个成员都连接至 DB2 系统以访问 IBM MQ 对象(包括队列和通道)的共享定义。该组中的任何队列管理器都可以检索保留在共享队列上的消息。因此,想要访问其中一个共享队列的应用程序可以连接至队列共享组中的任何队列管理器,所以该应用程序并不依赖于特定队列管理器是否可用。
本地队列、远程队列和集群
在 IBM MQ 网络中,通过在两个队列管理器或(对于 IBM MQ for z/OS)队列共享组之间发送消息来实现双向通信。
IBM MQ 应用程序可将消息放在本地队列上,本地队列就是队列管理器上与应用程序相连的队列。队列管理器具有它拥有的每个队列的定义。队列管理器还可以具有其他队列管理器拥有的队列的定义。从与应用程序相连的本地队列管理器角度而言,其他这些队列是远程队列,拥有这些队列的队列管理器是远程队列管理器。
除了将消息放在本地队列上以外,连接至本地队列管理器的 IBM MQ 应用程序还可以将消息放在远程队列上。然后,IBM MQ 必须将消息传输到拥有这些远程队列的远程队列管理器。为远程队列管理器上的 IBM MQ 队列预定了消息时,本地队列管理器会将这些消息保留在传输队列中,直到准备将它们转发至远程队列管理器为止。传输队列 是特殊类型的本地队列,消息存储在传输队列上,直到可以成功地将消息传输或存储到远程队列管理器。
可以通过使用 IBM MQ 平台上可用的任何通信协议将 IBM MQ 队列管理器互相连接起来组成一个集群。当您将队列管理器集中到集群时,仍然由队列管理器主管队列(因此,队列管理器不共享队列)。但是,通过将它们连接到集群中,队列管理器就可以将消息发送至该集群中的任何其他队列管理器,并使它们所主管的某些队列或所有队列作为集群队列可供该集群中的其他每个队列管理器使用。您不必在每个队列管理器上为每个远程队列以及与每个远程队列管理器的连接设置显式定义。集群中的每个队列管理器还使用单个集群传输队列来存放任何其他队列管理器的消息,从而使您不必为每个远程队列管理器都设置传输队列。
从 IBM MQ V7 开始,您还可以将拥有发布/预订消息传递的主题的 IBM MQ 队列管理器连接在一起。您可以将拥有主题的队列管理器组成一个发布/预订集群,并且所有成员之间建立了链接;或者,将队列管理器组成发布/预订层次结构,所连接的队列管理器之间存在父/子关系。该集群或层次结构中的所有队列管理器之间可以共享对于主题的发布和预订。
消息通道
IBM MQ 消息(无论它们放在队列上还是已发布到主题)通过消息通道在队列管理器之间进行传输。消息通道是两个队列管理器之间的单向通信链路。它可以携带为远程队列管理器主管的任意数目的队或主题,或者为任意数目的目标队列管理器预定的消息。
- “发送方 - 接收方”通道
- “请求者 - 服务器”通道
- “请求者 - 发送方”通道
- “服务器 - 接收方”通道
- “集群 - 发送方”通道
- “集群 - 接收方”通道
例如,要定义称为“发送方 - 接收方”通道的消息通道类型,请在发送方定义一个发送方通道,此通道可能是本地队列管理器。然后,在接收方使用同一名称来定义接收方通道,此通道可能是远程队列管理器。消息通道是单向的,因此,如果您希望消息双向传递,那么必须在队列管理器之间定义另一个按反方向传递消息的消息通道。
对于集群中的队列管理器,您不必在每一对队列管理器之间都定义消息通道。而是定义两个消息通道以将每个队列管理器连接到集群中:一个“集群 - 接收方”通道用于接收消息,还有一个“集群 - 发送方”通道,队列管理器通过此通道来介绍它自己和了解该集群。然后,队列管理器可以将消息发送至该集群中的任何其他队列管理器。
请勿将消息通道与 MQI 通道混淆。MQI 是 IBM MQ 中的消息队列接口,应用程序使用 MQI 与队列管理器进行交互。MQI 通道是一种连接类型,IBM MQ 客户机应用程序使用 MQI 通道连接至正在另一个系统中运行的队列管理器以及向队列管理器发出 MQI 调用。