IBM MQ

IBM MQ

August 10, 2020
MQ

IBM MQ 架构

IBM WebSphere MQ 架构:

IBM WheSphere MQ 特性:

  • 支持事务
  • 具有特殊的技术防止消息重复传送,确保消息一次且仅一次传递

概念

消息

队列

  • 本地队列:位于本地物理磁盘
  • 远程队列:本地应用程序只能往里面放消息,不能直接读消息。只能从本地队列读取消息
  • 传输队列:临时存储将要发送到远程队列的消息
  • 启动队列:触发中使用的队列,触发器触发事件时,将触发器消息发送到启动队列
  • 死信队列:存储无法正确发送到目的地的消息的队列

通道

通道:提供从一个队列管理器到另外一个队列管理器的通信路径

通道如何使用

MQSC

MQSC 是用来管理队列管理器等对象的脚本命令,可以使用 runmqsc 向队列管理器发出 MQSC 命令。

MQSC 的官方命令文档:The MQSC Commands

MQSC 的一些规则:

  • 关键字不区分大小写:ALTERalterAlteR 都是一样的
  • 很多命令都有同义词:例如 DEFINE CHANNEL 可以写为 def chl
  • 用单引号引用的字符串,IBM MQ 不做转换处理
  • 每条命令必须以新行开始

Control Commands

Control Commands 的官方文档:The control commands

发送消息步骤

发送消息前,需要启动队列管理器、启动监听器(监听在某个端口)。

为了把消息从一个队列管理器发送到另一个队列管理器,您需要定义两个通道;一个是在源队列管理器(指明传输队列名、目标系统的IP:PORT),另一个是在目标队列管理器。

为把消息从一个队列管理器发送到另一个队列管理器,您需要定义六个队列;在源队列管理器需要定义四个(远程队列、启动队列、传输队列、死信队列-推荐),目标队列管理器要定义两个(本地队列、死信队列-推荐)。

编程接口

Queue Manager

// declare an object of type queue manager
MQQueueManager queueManager = new MQQueueManager();
MQQueueManager queueManager = new MQQueueManager("qMgrName");

...
// do something...
...
// disconnect from the queue manager
queueManager.disconnect();

MQEnvironment

MQEnvironment.hostname = "host.domain.com";
MQEnvironment.channel = "java.client.channel";
// 默认 port 是 1414
MQEnvironment.port = nnnn;
MQEnvironment.CCSID = 1381;//这个是编码格式的代号,UTF-8为1381
MQEnvironment.userID = "MUSR_MQADMIN";//这个是登录MQ服务器用的用户名,需要在MQ服务器上设置
MQEnvironment.password = "123456";//这个是登录MQ服务器用的密码

Queue

// 打开队列
MQQueue queue = queueManager.accessQueue("qName",CMQC.MQOO_OUTPUT);
queue.close();

参考