IBM WebSphere MQ 基础教程
目录
- 什么是 IBM WebSphere MQ?
- 为什么需要 MQ?(核心价值)
- MQ 的核心概念与架构
- MQ 的基本工作流程
- 实践:安装与配置一个简单的 MQ 环境
- 常用 MQ 命令
- MQ 应用程序编程模型简介
- 总结与进阶方向
什么是 IBM WebSphere MQ?
IBM WebSphere MQ(简称 MQ),现在已更名为 IBM MQ,是 IBM 公司开发的一种业界领先的消息中间件。

你可以把它想象成一个企业级的“邮政系统”,在这个系统中:
- 应用程序(发信人)不需要直接将消息发送给另一个应用程序(收信人)。
- 它们只需要将消息“投递”到一个叫做队列 的“邮局信箱”里。
- 接收方应用程序则从自己的“信箱”里取出消息进行处理。
这个“邮政系统”负责确保消息的可靠、异步传输,并处理各种复杂的网络环境和系统故障。
一个简单的比喻:
你想给你的朋友寄一封重要的信,你不需要亲自跑到朋友家门口把信交给他(这就像直接网络连接),你只需要把信投入楼下的邮筒(队列),邮局系统(MQ Manager)会负责分拣、运输,最终确保信件被送到朋友家的信箱(目标队列)里,你的朋友什么时候来取信(应用程序接收),这与你寄信的时间无关。
(图片来源网络,侵删)
为什么需要 MQ?(核心价值)
MQ 的核心价值在于解决分布式系统中应用程序之间的通信问题,主要体现在以下几个方面:
| 特性 | 描述 | 解决的问题 |
|---|---|---|
| 异步通信 | 发送方发送消息后,无需等待接收方处理即可继续执行自己的任务。 | 系统解耦和性能提升,发送方不会被接收方的处理速度或宕机所拖累。 |
| 可靠投递 | MQ 提供了多种机制(如持久化、确认机制)确保消息不会因为网络故障或系统崩溃而丢失。 | 数据不丢失,保证业务流程的完整性。 |
| 应用解耦 | 发送方和接收方只需要知道对方的队列名称,无需了解对方的网络地址、技术栈甚至是否在线。 | 系统灵活性和可维护性,可以独立地升级、替换或维护任何一方,而不会影响另一方。 |
| 流量削峰 | 在高并发场景下,MQ 可以像一个缓冲区,暂时存储大量的请求消息,然后让接收方按照自己的处理能力慢慢消费。 | 防止系统被瞬时高流量冲垮,提高系统的稳定性和鲁棒性。 |
| 数据分发 | 一个消息可以被发送到多个不同的队列,实现“一对多”的消息广播。 | 统一数据源,方便将同一份数据分发给多个不同的业务系统。 |
MQ 的核心概念与架构
要理解 MQ,必须先了解以下几个核心组件:
a. 队列管理器
这是 MQ 的核心大脑,每个队列管理器都是一个独立的进程,负责管理一组队列、通道和其它对象,你可以把它想象成一个“邮局分局”,它只负责自己辖区内的信件处理,一个 MQ 服务器上可以运行多个队列管理器。
b. 队列
消息的实际存放地,队列是队列管理器的一部分,主要分为三种:

- 本地队列:存储在本机队列管理器中的消息,是消息的最终目的地或中转站。
- 传输队列:用于将消息发送到远程队列管理器,消息在发送前会先进入传输队列,等待通道程序将其“运送”出去。
- 远程队列:一个定义,它指向了另一个队列管理器(可能是远程的)上的一个本地队列,它包含了目标队列管理器的名称和目标队列的名称,像一个“地址标签”。
- 别名队列:为一个已存在的队列(本地或远程)提供一个别名,方便迁移或重命名。
- 模型队列:一个“模板”,用于快速创建多个属性相同的队列。
c. 通道
队列管理器之间传输消息的“管道”,它定义了两个队列管理器如何通信(使用 TCP/IP 协议),通道是单向的,如果一个队列管理器需要双向通信,就需要配置两个通道(一个发送,一个接收)。
d. 监听器
队列管理器上的一个“门卫”,它在一个特定的端口上监听来自其他队列管理器的连接请求,当有连接请求时,它会唤醒相应的通道程序开始工作。
e. 消息
要传输的数据单元,每条消息都包含:
- 消息描述符:由 MQ 系统自动生成,包含消息 ID、时间戳、优先级等元数据。
- 消息体:应用程序实际要传输的数据,可以是文本、XML、JSON 或二进制数据等。
f. 队列管理器名称
每个队列管理器的唯一标识符,类似于计算机的 IP 地址或主机名。
MQ 的基本工作流程
一个典型的跨队列管理器的消息发送和接收流程如下:
- 发送方应用程序 连接到本地队列管理器。
- 发送方应用程序将消息放入一个本地传输队列。
- 发送方队列管理器的发送通道 从传输队列中取出消息。
- 发送通道通过监听器 建立到接收方队列管理器的网络连接。
- 接收方队列管理器的接收通道 接收消息。
- 接收通道将消息放入接收方队列管理器上的本地目标队列 中。
- 接收方应用程序 连接到接收方队列管理器,并从目标队列中取出消息进行处理。
实践:安装与配置一个简单的 MQ 环境
我们将模拟一个最简单的场景:在一台机器上创建两个队列管理器,它们之间互相发送和接收消息。
前提条件
- 已安装 IBM MQ,你可以从 IBM MQ 官网 下载社区版(免费)进行学习。
步骤 1: 创建队列管理器
打开命令行工具(Windows 的 CMD 或 PowerShell,Linux 的 Shell)。
-
创建第一个队列管理器
QM_GRPAcrtmqm -q "QM_GRPA"
-q:表示创建一个本地队列管理器。
-
创建第二个队列管理器
QM_GRPBcrtmqm -q "QM_GRPB"
步骤 2: 启动队列管理器
-
启动
QM_GRPAstrmqm "QM_GRPA"
-
启动
QM_GRPBstrmqm "QM_GRPB"
步骤 3: 定义队列、通道和监听器
我们需要在两个队列管理器上分别创建相应的对象。
在 QM_GRPA 上操作:
-
创建本地队列
QL_LOCALA(这是消息的最终目的地)runmqsc "QM_GRPA"
进入 MQSC 命令行后,输入:
DEFINE QLOCAL(QL_LOCALA) END -
定义远程队列
QL_REMOTEB(指向QM_GRPB上的队列)DEFINE QREMOTE(QL_REMOTEB) RQMNAME(QM_GRPB) RNAME(QL_LOCALB) XMITQ(QX_GRPA) END -
创建传输队列
QX_GRPA(用于发送到QM_GRPB)DEFINE QLOCAL(QX_GRPA) USAGE(XMITQ) END -
定义发送通道
CH.SEND.TO.BDEFINE CHANNEL(CH.SEND.TO.B) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME('localhost(1414)') ENDCHLTYPE(SDR):表示发送通道。CONNAME('localhost(1414)'):指定连接到目标队列管理器的地址和

