贝博恩创新科技网

IBM WebSphere MQ基础教程的核心要点是什么?

IBM WebSphere MQ 基础教程

目录

  1. 什么是 IBM WebSphere MQ?
  2. 为什么需要 MQ?(核心价值)
  3. MQ 的核心概念与架构
  4. MQ 的基本工作流程
  5. 实践:安装与配置一个简单的 MQ 环境
  6. 常用 MQ 命令
  7. MQ 应用程序编程模型简介
  8. 总结与进阶方向

什么是 IBM WebSphere MQ?

IBM WebSphere MQ(简称 MQ),现在已更名为 IBM MQ,是 IBM 公司开发的一种业界领先的消息中间件

IBM WebSphere MQ基础教程的核心要点是什么?-图1
(图片来源网络,侵删)

你可以把它想象成一个企业级的“邮政系统”,在这个系统中:

  • 应用程序(发信人)不需要直接将消息发送给另一个应用程序(收信人)。
  • 它们只需要将消息“投递”到一个叫做队列 的“邮局信箱”里。
  • 接收方应用程序则从自己的“信箱”里取出消息进行处理。

这个“邮政系统”负责确保消息的可靠、异步传输,并处理各种复杂的网络环境和系统故障。

一个简单的比喻:

你想给你的朋友寄一封重要的信,你不需要亲自跑到朋友家门口把信交给他(这就像直接网络连接),你只需要把信投入楼下的邮筒(队列),邮局系统(MQ Manager)会负责分拣、运输,最终确保信件被送到朋友家的信箱(目标队列)里,你的朋友什么时候来取信(应用程序接收),这与你寄信的时间无关。

IBM WebSphere MQ基础教程的核心要点是什么?-图2
(图片来源网络,侵删)

为什么需要 MQ?(核心价值)

MQ 的核心价值在于解决分布式系统中应用程序之间的通信问题,主要体现在以下几个方面:

特性 描述 解决的问题
异步通信 发送方发送消息后,无需等待接收方处理即可继续执行自己的任务。 系统解耦性能提升,发送方不会被接收方的处理速度或宕机所拖累。
可靠投递 MQ 提供了多种机制(如持久化、确认机制)确保消息不会因为网络故障或系统崩溃而丢失。 数据不丢失,保证业务流程的完整性。
应用解耦 发送方和接收方只需要知道对方的队列名称,无需了解对方的网络地址、技术栈甚至是否在线。 系统灵活性可维护性,可以独立地升级、替换或维护任何一方,而不会影响另一方。
流量削峰 在高并发场景下,MQ 可以像一个缓冲区,暂时存储大量的请求消息,然后让接收方按照自己的处理能力慢慢消费。 防止系统被瞬时高流量冲垮,提高系统的稳定性和鲁棒性。
数据分发 一个消息可以被发送到多个不同的队列,实现“一对多”的消息广播。 统一数据源,方便将同一份数据分发给多个不同的业务系统。

MQ 的核心概念与架构

要理解 MQ,必须先了解以下几个核心组件:

a. 队列管理器

这是 MQ 的核心大脑,每个队列管理器都是一个独立的进程,负责管理一组队列、通道和其它对象,你可以把它想象成一个“邮局分局”,它只负责自己辖区内的信件处理,一个 MQ 服务器上可以运行多个队列管理器。

b. 队列

消息的实际存放地,队列是队列管理器的一部分,主要分为三种:

IBM WebSphere MQ基础教程的核心要点是什么?-图3
(图片来源网络,侵删)
  • 本地队列:存储在本机队列管理器中的消息,是消息的最终目的地或中转站。
    • 传输队列:用于将消息发送到远程队列管理器,消息在发送前会先进入传输队列,等待通道程序将其“运送”出去。
    • 远程队列:一个定义,它指向了另一个队列管理器(可能是远程的)上的一个本地队列,它包含了目标队列管理器的名称和目标队列的名称,像一个“地址标签”。
  • 别名队列:为一个已存在的队列(本地或远程)提供一个别名,方便迁移或重命名。
  • 模型队列:一个“模板”,用于快速创建多个属性相同的队列。

c. 通道

队列管理器之间传输消息的“管道”,它定义了两个队列管理器如何通信(使用 TCP/IP 协议),通道是单向的,如果一个队列管理器需要双向通信,就需要配置两个通道(一个发送,一个接收)。

d. 监听器

队列管理器上的一个“门卫”,它在一个特定的端口上监听来自其他队列管理器的连接请求,当有连接请求时,它会唤醒相应的通道程序开始工作。

e. 消息

要传输的数据单元,每条消息都包含:

  • 消息描述符:由 MQ 系统自动生成,包含消息 ID、时间戳、优先级等元数据。
  • 消息体:应用程序实际要传输的数据,可以是文本、XML、JSON 或二进制数据等。

f. 队列管理器名称

每个队列管理器的唯一标识符,类似于计算机的 IP 地址或主机名。

MQ 的基本工作流程

一个典型的跨队列管理器的消息发送和接收流程如下:

  1. 发送方应用程序 连接到本地队列管理器。
  2. 发送方应用程序将消息放入一个本地传输队列
  3. 发送方队列管理器的发送通道 从传输队列中取出消息。
  4. 发送通道通过监听器 建立到接收方队列管理器的网络连接。
  5. 接收方队列管理器的接收通道 接收消息。
  6. 接收通道将消息放入接收方队列管理器上的本地目标队列 中。
  7. 接收方应用程序 连接到接收方队列管理器,并从目标队列中取出消息进行处理。

实践:安装与配置一个简单的 MQ 环境

我们将模拟一个最简单的场景:在一台机器上创建两个队列管理器,它们之间互相发送和接收消息。

前提条件

  • 已安装 IBM MQ,你可以从 IBM MQ 官网 下载社区版(免费)进行学习。

步骤 1: 创建队列管理器

打开命令行工具(Windows 的 CMD 或 PowerShell,Linux 的 Shell)。

  1. 创建第一个队列管理器 QM_GRPA

    crtmqm -q "QM_GRPA"
    • -q:表示创建一个本地队列管理器。
  2. 创建第二个队列管理器 QM_GRPB

    crtmqm -q "QM_GRPB"

步骤 2: 启动队列管理器

  1. 启动 QM_GRPA

    strmqm "QM_GRPA"
  2. 启动 QM_GRPB

    strmqm "QM_GRPB"

步骤 3: 定义队列、通道和监听器

我们需要在两个队列管理器上分别创建相应的对象。

QM_GRPA 上操作:

  1. 创建本地队列 QL_LOCALA (这是消息的最终目的地)

    runmqsc "QM_GRPA"

    进入 MQSC 命令行后,输入:

    DEFINE QLOCAL(QL_LOCALA) 
    END
  2. 定义远程队列 QL_REMOTEB (指向 QM_GRPB 上的队列)

    DEFINE QREMOTE(QL_REMOTEB) RQMNAME(QM_GRPB) RNAME(QL_LOCALB) XMITQ(QX_GRPA)
    END
  3. 创建传输队列 QX_GRPA (用于发送到 QM_GRPB)

    DEFINE QLOCAL(QX_GRPA) USAGE(XMITQ)
    END
  4. 定义发送通道 CH.SEND.TO.B

    DEFINE CHANNEL(CH.SEND.TO.B) CHLTYPE(SDR) TRPTYPE(TCP) CONNAME('localhost(1414)')
    END
    • CHLTYPE(SDR):表示发送通道。
    • CONNAME('localhost(1414)'):指定连接到目标队列管理器的地址和
分享:
扫描分享到社交APP
上一篇
下一篇