`

MQ系列管理

 
阅读更多

1.队列管理器配置文件

UNIX:/var/mqm/qmgrs/queue.manager/qm.ini;

Windows:c:\mqm\qmgrs\queue!manager(队列管理器名为queue.manager)。

 

2.控制命令(Control Commands)

执行对队列管理器(queue manager)、command servers、channels的操作。有如下命令:

(1).建立队列管理器

注意事项:

  • 在网络里队列管理器名称必须唯一;
  • 限制队列管理器的数量,因为每个管理器都要消耗资源;
  • 定义一个缺省的队列管理器,使用crtmqm的-q选项;
  • 定义一个dead-letter queue,使用crtmqm的-u选项;
  • 定义一个缺省的transmission queue,使用crtmqm的-d选项;
  • 定义日志参数;

配置文件:

MQSeries configuration file(mqs.ini):每个安装拷贝一份;

queue manager configurationfile(qm.ini):每个队列管理器一份。

建立缺省队列管理器:

crtmqm -q -d MY.DEFAULT.XMIT.QUEUE -u \
SYSTEM.DEAD.LETTER.QUEUE saturn.queue.manager

其中:

-q,定义为缺省队列管理器;

-d,指定缺省transmission queue;

-u,指定dead-letter queue;

saturn.queue.manager为队列管理器名称;

(2).启动队列管理器
strmqm saturn.queue.manager
(3).把一个存在的对立管理器设置为缺省队列管理器

手工修改配置文件mqs.ini中的DefaultQueueManager分节。

(4).停止队列管理器

Quiesced shutdown,等待所有的应用连接断开:

endmqm saturn.queue.manager;
endmqm -c saturn.queue.manager;提醒应用终止,与上等效。
endmqm -w saturn.queue.manager;等待所有应用程序终止和队列管理器终止。

Immediate shutdown,允许当前MQI CALL完成,不接受新的MQI CALL,不等待应用断开连接:

endmqm -i saturn.queue.manager

Preemptive shutdown,极端做法,立即终止:

endmqm -p saturn.queue.manager
(5).删除队列管理器
dltmqm saturn.queue.manager

 

3.使用MQSC管理本地对象(local MQSeries objects)

应用程序可以放消息到本地或远程队列(使用MQPUT),但只可以从本地队列直接获得消息(使用MQGET)。

MQSC命令和属性不区分大小写,但对象本身是区分大小写的。

支持输入/输出的重定向(stdin/stdout)。

(1).启动MQSC命令
runmqsc,不输入参数则管理缺省队列管理器,否则要指出队列管理器名。

命令内容以“+”表示续行,没有表示结束,也可用“;”明确表示结束。

(2).结束MQSC命令
END
或输入EOF字符
(3).显示队列管理器属性
DISPLAY QMGR (ALL)
(4).修改队列管理器属性
ALTER QMGR DEADQ (ANOTHERDLQ) INHIBTEV (ENABLED)

在ALTER QMGR后列出要修改的属性和值。

(5).运行文本中的MQSC命令
runmqsc < myprog.in,使用重定向

文件每行不要超过72字符,例子文本:

amqscos0.tst:Definitions of objects used by sample programs;

amqscic0.tst:Definitions of queues for CICS transactions。

所在目录:

mqmtop/samp(UNIX);

mqmtop\tools\mqsc\samples(WIN)。

校验文本:

runmqsc -v < myprog.in > myprog.out

不能校验远程队列管理器。

(6).定义本地队列(loacl queue)
DEFINE QLOCAL (ORANGE.LOCAL.QUEUE) + 名称
  DESCR('Queue for messages') +      描述
  PUT (DISABLED) +                   不允许put
  GET (ENABLED) +                    允许get
  NOTRIGGER +                        不产生trigger
  MSGDLVSQ (FIFO) +                  使用FIFO模式
  MAXDEPTH (1000) +                  最多1000个消息
  MAXMSGL (2000) +                   每个消息最大2000字节
  USAGE(NORMAL);                     普通队列(非transmission queue)
(7).定义a dead-letter queue

两种方法:

  • 在crtmqm中指定-u选项;
  • 使用ALTER QMGR命令。

Dead-letter队列必须是一个本地队列,而且其MAXMSGL参数必须足够大,能存放当前最大的消息。

一个例子是:SYSTEM.DEAD.LETTER.QUEUE,在建立队列管理器时自动创建。

(8).显示队列的缺省属性

有一个系统队列:SYSTEM.DEFAULT.LOCAL.QUEUE,用户没指定的属性都从它复制过来。所以命令如下:

DISPLAY QUEUE (SYSTEM.DEFAULT.LOCAL.QUEUE)
(9).显示队列的属性
DISPLAY QUEUE (ORANGE.LOCAL.QUEUE) +
MAXDEPTH +
MAXMSGL +
CURDEPTH;

显示队列ORANGE.LOCAL.QUEUE的MAXDEPTH、MAXMSGL和CURDEPTH。其中CURDEPTH队列的当前深度,即当前在队列的消息数量。

不指定具体的属性名称则显示所有属性:

DISPLAY QUEUE (ORANGE.LOCAL.QUEUE)
(10).复制队列的定义

定义队列MAGENTA.QUEUE,其属性与ORANGE.LOCAL.QUEUE相同:

DEFINE QLOCAL (MAGENTA.QUEUE) +
LIKE (ORANGE.LOCAL.QUEUE)

在复制的同时也可进行修改:

DEFINE QLOCAL (THIRD.QUEUE) +
LIKE (ORANGE.LOCAL.QUEUE) +
MAXMSGL(1024);

当定义一个没有使用LIKE的队列时,其实际等于:

DEFINE LIKE(SYSTEM.DEFAULT.LOCAL.QUEUE)
(11).修改本地队列的属性

有两种方法,但效果不同:

  • ALTER QLOCAL;
  • DEFINE QLOCAL,使用REPLACE。
ALTER QLOCAL (ORANGE.LOCAL.QUEUE) +
MAXMSGL(10000);

修改MAXMSGL属性,其他保持不变。

DEFINE QLOCAL (ORANGE.LOCAL.QUEUE) +
MAXMSGL(1000) REPLACE;

不仅仅修改了MAXMSGL,其他属性都被缺省值覆盖。

(12).清空本地队列

删除队列中的所有消息:

CLEAR QLOCAL (MAGENTA.QUEUE)

当队列中有未提交的消息,或还有应用程序打开队列时,无法清空。

(13).删除一个本地队列
DELETE QLOCAL (PINK.QUEUE);

不能删除有未提交的消息的队列。

使用PURGE可以删除含有已提交消息的队列:

DELETE QLOCAL (PINK.QUEUE) PURGE

使用UNPURGE不可以删除含有已提交消息的队列。

(14).浏览(browse)队列中的内容

程序和源代码:

UNIX:Source:mqmtop/samp/amqsbcg0.c;

Executable:mqmtop/samp/bin/amqsbcg。

WINDOWS:Source:c:\mqm\tools\c\samples\amqsbcg0.c;

Executable:c:\mqm\tools\c\samples\bin\amqsbcg.exe。

使用时指定两个参数,队列名和队列管理器名:

amqsbcg SYSTEM.ADMIN.QMGREVENT.tpp1 saturn.queue.manager
(15).定义别名(an alias queue)
DEFINE QALIAS (MY.ALIAS.QUEUE) TARGQ +
(YELLOW.QUEUE);

定义队列YELLOW.QUEUE的别名MY.ALIAS.QUEUE。

ALTER QALIAS (MY.ALIAS.QUEUE) TARGQ +
(MAGENTA.QUEUE);

可以修改别名使其指向别的队列。

定义别名可修改属性,使同一个对列不同的别名有不同的属性:

DEFINE QALIAS (ALPHAS.ALIAS.QUEUE) +
TARGQ (YELLOW.QUEUE) +
PUT (ENABLED) +
GET (DISABLED)

DEFINE QALIAS (BETAS.ALIAS.QUEUE) +
TARGQ (YELLOW.QUEUE) +
PUT (DISABLED) +
GET (ENABLED)

也可使用LIKE和REPLACE来定义别名。

(16).使用别名的其他命令
DISPLAY QUEUE (ALPHAS.ALIAS.QUEUE);

ALTER QALIAS (ALPHAS.ALIAS.QUEUE) +
TARGQ(ORANGE.LOCAL.QUEUE) FORCE

DELETE QALIAS (ALPHAS.ALIAS.QUEUE);
(17).定义model队列

model队列提供一个模板,当请求该类队列时,由队列管理器动态产生一个队列。

定义方法同定义本地队列,此外,还可指定动态队列是临时temporary或永久的permanent。

DEFINE QMODEL (GREEN.MODEL.QUEUE) +
  DESCR('Queue for messages from application X') +
  PUT (DISABLED) +
  GET (ENABLED) +
  NOTRIGGER +
  MSGDLVSQ (FIFO) +
  MAXDEPTH (1000) +
  MAXMSGL (2000) +
  USAGE (NORMAL) +
  DEFTYPE (PERMDYN)

其中DEFTYPE指定产生的动态队列是permanent dynamic queues。

缺省属性来源于SYSYTEM.DEFAULT.MODEL.QUEUE。

(18).使用model的其他命令
DISPLAY QUEUE (GREEN.MODEL.QUEUE);

ALTER QMODEL (BLUE.MODEL.QUEUE) PUT(ENABLED);

DELETE QMODEL (RED.MODEL.QUEUE);
(19).定义应用队列的triggering
DEFINE QLOCAL (MOTOR.INSURANCE.QUEUE) +
  PROCESS (MOTOR.INSURANCE.QUOTE.PROCESS) + trigger产生时执行的应用
  MAXMSGL (2000) +
  DEFPSIST (YES) +
  INITQ (MOTOR.INS.INIT.QUEUE) + initiation queue名,放trigger消息
  TRIGGER +                   使用trigger
  TRIGTYPE (DEPTH) +   指定trigger发生的事件:超过TRIGDPTH
  TRIGDPTH (100)+      产生trigger的消息数量
  TRIGMPRI (5);        计算消息的最低优先级
(20).定义initiation queue

当trigger事件发生时,放置trigger消息在initiation queue中。

定义方法同local queue,可类似如下定义:

DEFINE QLOCAL(MOTOR.INS.INIT.QUEUE) +
  GET (ENABLED) +
  NOSHARE +
  NOTRIGGER +
  MAXMSGL (2000) +
  MAXDEPTH (1000)
(21).定义process
DEFINE PROCESS (MOTOR.INSURANCE.QUOTE.PROCESS) +
  DESCR ('Insurance request message processing') +
  APPLTYPE (UNIX) +               应用类型
  APPLICID ('/u/admin/test/IRMP01') +  可执行程序路径
  USERDATA ('open, close, 235');用户自定义数据由应用使用
(22).显示process的属性
DISPLAY PROCESS (MOTOR.INSURANCE.QUOTE.PROCESS);

也可使用ALTER PROCESS和DELETE PROCESS来修改/删除process。

 

4.使用MQSC管理远程对象

(1).启动命令服务器(command server)

命令strmqcsv,后跟队列管理器名:

strmqcsv saturn.queue.manager
(2).显示command server的状态
dspmqcsv saturn.queue.manager;
(3).停止command server
endmqcsv saturn.queue.manager;
与endmqcsv -c saturn.queue.manager等同;

立即停止:

endmqcsv -i saturn.queue.manager;
(4).准备队列管理器

在两个系统上都要做的工作:

  • 建立好队列管理器和缺省的对象(crtmqm);
  • 启动队列管理器(strmqm)。

在目标队列管理器上:

  • 队列SYSTEM.ADMIN.COMMAND.QUEUE必须存在;
  • command server必须启动(strmqcsv)。
(5).准备channels和transmission queues

需要两个channels,每个方向一个;他们关联着transmission queue。以TCP为例。

(6).定义channels和transmission queues

在源端队列管理器:

定义Sender channel:

DEFINE CHANNEL ('source.to.target') +
CHLTYPE(SDR) +
CONNAME (RHX5498) +     机器的网络名称
XMITQ ('target.queue.manager') + transmission queue名
TRPTYPE(TCP)

定义receiver channel:

DEFINE CHANNEL ('target.to.source') +
CHLTYPE(RCVR) +
TRPTYPE(TCP)

定义transmission queue:

DEFINE QLOCAL ('target.queue.manager') +
USAGE (XMITQ)

在目的端队列管理器:

定义sender channel:

DEFINE CHANNEL ('target.to.source') +
CHLTYPE(SDR) +
CONNAME (RHX7721) +
XMITQ ('source.queue.manager') +
TRPTYPE(TCP)

定义receiver channel

DEFINE CHANNEL ('source.to.target') +
CHLTYPE(RCVR) +
TRPTYPE(TCP)

定义transmission queue

DEFINE QLOCAL ('source.queue.manager') +
USAGE (XMITQ)
(7).启动channels

UNIX平台:

启动监听器:配置inetd,使其正常运行MQ监听器;

在源端启动channels:

runmqchl -c source.to.target -m source.queue.manager &;

在目的端启动channels:

runmqchl -c target.to.source -m source.queue.manager &;

Windows平台:

启动监听器:

在源端:

START runmqlsr -t TCP -m source.queue.manager;

在目的端:

START runmqlsr -t TCP -m target.queue.manager;

在源端启动channels:

START runmqchl -c source.to.target -m source.queue.manager;

在目的端启动channels:

START runmqchl -c target.to.source -m source.queue.manager;
(8).远程执行MQSC命令

在目的端保证已经启动command server:

strmqcsv target.queue.manager;

在源端:

runmqsc -w 30 target.queue.manager;(超时为30秒)

使用重定向:

runmqsc -w 60 target.queue.manager < mycomds.in > report.out;
(9).建立a local definition of a remote queue
DEFINE QREMOTE (CYAN.REMOTE.QUEUE) +  远程对象的本地名字
DESCR ('Queue for insur req from the branches') + 说明
RNAME (AUTOMOBILE.INSURANCE.QUOTE.QUEUE) + 远程队列管理
                                      器的一个本地队列名
RQMNAME (jupiter.queue.manager) +  远程队列管理器的名字
XMITQ (INQUOTE.XMIT.QUEUE); transmission queue名,
	若不指定,则使用一个名字与远程管理器名称相同的队列。
(10).使用local definition的其他命令
DISPLAY QUEUE (CYAN.REMOTE.QUEUE);
ALTER QREMOTE (CYAN.REMOTE.QUEUE) PUT(ENABLED);
DELETE QREMOTE (CYAN.REMOTE.QUEUE);

不能删除一个远程对象,只是删除了本地引用。

(11).建立a transmission queue

当向远程队列放置消息时,若没有指定transmission queue,则缺省使用名字与远程队列管理器名称相同的transmission queue,若这样的队列不存在,则定义它。

DEFINE QLOCAL ('target.queue.manager') +
DESCR ('Default transmission queue for target qm') +
USAGE (XMITQ);

 

5.保护MQ对象

在UNIX下,存取MQ对象的用户ID必须是mqm组的成员。若管理一个远程对象,则该用户ID也必须是远程系统的mqm组成员。

在WINDOWS下,用户ID必须是mqm组或administrators组的成员。若管理一个远程对象,则该用户ID也必须是远程系统的mqm组或administrators组的成员。

缺省OAM(object authority manager)是起作用的,可以禁止它,在队列管理器建立之前设置环境变量:

UNIX:export MQSNOAUT=yes

WNDOWS:SET MQSNOAUT=yes

但这样做之后,没法再起用OAM。

禁用OAM的另一法是在queue manager configuration file(qm.ini)删除uthorization service stanza。

 

6.配置文件

mqs.ini

qm.ini

from:http://www.duangw.net/computer/history/mq/admin.html

分享到:
评论

相关推荐

    MQ错误收集系列

    罗列了MQ 中间件的相关错误信息及解决方法

    MQ基础教程

    本书为IBM软件学院系列丛书,由在国内长期从事WebSphere MQ应用开发的技术专家和IBM公司部分资深的工程技术人员共同规划、执笔,本书是IBM软件学院指定的WebSphere MQ学习教材。全书分为3部分共14章,第一部分介绍的...

    Websphere MQ v7 新特性.pdf

    目前在IBM软件部从事WebSphere和IM系列产品售前工作和技术支持工作。主要工作经历包括基于J2EE平台的体系架构规划,大规模分布式j2ee系统设计和实施,企业内容管理系统的设计和开发,j2ee、c/c++应用程序开发,EAI&SOA...

    系列之五:ORACLE EBS 系统主数据管理(A)

    系列之五:ORACLE EBS 系统主数据管理(A)

    websphere-mq-monitoring-extension:AppDynamics WebSphere MQ监控扩展

    Websphere MQ(以前称为MQ(消息队列)系列)是一种IBM标准,用于跨多个平台进行程序到程序的消息传递。 WebSphere MQ监视扩展可以监视多个队列管理器及其资源,即队列,主题,通道和侦听器。使用提取度量标准。 ...

    ASL-MQ:ETH 高级系统实验室

    这个想法是构建一个更简单的系统版本,比如 Apache ActiveMQ、IBM MQ 系列或 JBoss Messaging。 我们使用 Java 作为编程语言,使用 PostgreSQL 作为数据库。 该系统分为三层:客户端、消息中间件和数据库。 系统...

    Spring系列,第4部分:SpringJMS消息处理

    本文内容包括:SpringJMSIBMWebSphereMQSpringJMS模板SpringJMS实现队列管理器的设置运行示例下载参考资料快速了解使用SpringJMS框架和IBMWebSphereMQ5.3进行JMS消息处理的基础知识。在Spring系列的第4期也是最后一...

    Fourinone分布式计算框架

    FourInOne(中文名字“四不像”)是一个四合一分布式计算框架,在写这个...开发包里自带了一系列傻瓜上手demo,包括分布式计算、统一配置管理、集群管理、分布式锁、分布式缓存、MQ等方面帮助掌握fourinone的全部功能

    GoCrawler:使用Go,Postgres,RabbitMQ和Docker实现的分布式Web搜寻器

    然后,它对每个获得的链接重复相同的过程,以递归方式索引一系列页面,从而在站点上进行爬网。 在这里,使用主管工作程序服务器模型,我们利用一组分布式工作程序节点来处理每个页面,并使用管理程序与客户端进行...

    计算机行业中间件市场研究报告

    操作系统、数据库和中间件是基础软件的三驾马车。按照IDC的定义,中间件 (Middleware)是一种独立的系统软件或服务程序,分布式应用软件借助这种软件...1994年IBM发布消息队列服务MQ系列产品,消息中 间件产生。Java凭

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    MQ Cron 数据层架构设计 缓存优化 DAO&ORM; 双主架构 主从同步 读写分离 性能优化架构能力 代码级别 关联代码优化 cache对其 分支预测 copy on write 内联优化 系统优化 cache 延迟计算 数据预读 ...

    fourinone-3.04.25

    开发包里自带了一系列傻瓜上手demo,包括分布式计算、统一配置管理、集群管理、分布式锁、分布式缓存、MQ等方面, 每个demo均控制在少许行代码内,但是涵盖了Fourinone主要的功能,方便大家快速理解并掌握。...

    Fourinone分布式并行计算四合一框架

     开发包里自带了一系列傻瓜上手demo,包括分布式计算、统一配置管理、集群管理、分布式锁、分布式缓存、MQ等方面, 每个demo均控制在少许行代码内,但是涵盖了Fourinone主要的功能,方便大家快速理解并掌握。...

    spring-boot-2.1.0.RELEASE:SpringBoot源码分析-项目里有超详细的中文代码注释,中文注释会转换每篇SpringBoot的源码分析文章的推出而更新,中文注释持续更新中..-项目

    【原始笔记】专注于Java一系列系列的二进制分析。若觉得原始分析文章不错,欢迎Star照亮哦。 ============== SpringBoot源码专题持续更新中... ==================== 本项目结合以下源码分析文章阅读或调试效果会更...

    大规模分布式系统架构下调测能力构建之道

    讲师将通过自身的经验来详细展示如何有机结合分布式服务MOCK(微服务、MQ、Cache、File、DBProxy)、Stub数据制作及管理、服务直连调测、契约测试保障等能力来构建一套应对研发各阶段开发需求的调测框架及方法论。...

    ansible-role-rabbitmq:提供和安装RabbitMQ节点和_或集群的角色

    兔子MQ 3.6.x 好的 3.7.x 好的 &gt; 3.7 未测试 埃尔朗 20倍 好的 21倍 好的 22倍 KO [1] 分配 CentOS的7 好的 CentOS&gt; 7 未测试 Debian 9 好的 Debian&gt; 9 未测试 Ubuntu仿生 好的 Ubuntu&gt;仿生 未测试 ...

    java外卖系统源码-Book:书

    CVE-2017-11176,也称为“mq_notify: double sock_put ()”,已于 2017 年年中在大多数发行版中得到修复。 本系列主要针对 2.6.32.x 内核,但该漏洞存在于 4.11.9 之前的所有内核中。 一方面考虑的内核版本比较老,...

    spring-boot示例项目

    该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户...

Global site tag (gtag.js) - Google Analytics