当前位置: 首页 > news >正文

WebSphere MQ 入门指南

WebSphere MQ 入门指南
这是一篇入门指南。我们从最基本的概念说起;

基础概念

对于MQ,我们需要知道4个名词:队列管理器、队列、消息、通道;对于编程设计人员,通常更关心消息和队列,对于维护管理人员,通常 会更关心队列管理器和通道。
如果我们把队列管理器比作是数据库,那么队列就是其中的一张表,消息就是表中的一条记录。

  1. 队列:我们可以简单地把队列看成一个容器,用于存放消息。

  2. 队列管理器:队列管理器构建了独立的 MQ 的运行环境,它是消息队列的管理者,用来维护和管理消息队列。

  3. 消息:MQ中的最小对象;默认情况下,消息缺省可以达到 4MB。消息可以分成持久消息和非持久消息。所谓“持久”的 意思,就是在MQ 队列管理器重启动后,消息是否仍然能保持。持久的消息写入或读出队列的同时会在 Log 中记录,所以性能上比非持久消息差不少。

  4. 通道:通道则是两个队列管理器之间的一种单向的点对点的通信连接, 消息在通道中只能单向流动。队列管理器之间的通信是通过配置通道来实现 的,通道两侧的队列管理器对这个通道的相关参数应该能对应起来。在通道上可以配置不同的通信协议,这样就使得编程接口与通信协议无关。通道两端的 配置必须匹配,且名字相同,否则无法连通。

  5. RUNMQSC:命令行交互界面管理工具;作为维护人员的我们,与MQ打交道有两种方式,一种是通过MQ提供的二进制命令工具(在mq安装目录的bin目录下),另一种方式则是通过命令行交互管理工具;这二者在功能上有很多是重合的,但并非完全可替代;
    RUNMQSC是一个通用的 MQ 对象管理工具,使用 MQSC命令集可以对 MQ 对象进行
    全方位的管理,也是各种管理方式最直接、最全面的一种。
    RUNMQSC 运行的命令集称为 MQSC (MQ Script Command)";在 RUNMQSC 中大小写无关,所有的命令会先转换成全大写再提交执行。所以如果要 表示大小相关的字串,比如对象名,则用引号将字串包住。
    输入以下命令启动MQSC命令:runmqsc [queueManagerName]

ok,概念介绍完了,下面就是通过示例来学习如何使用他们;
首先,我们需要创建队列管理,用来存放队列。有了队列管理器后,就可以创建队列;队列创建了,就可以用来放入和取出消息;

创建队列管理器

eg:创建一个名为QM_MEMDB的队列管理器:

crtmqm -q QM_MEMDB
>Directory '/var/mqm/qmgrs/QM_MEMDB' created.

所有创建的队列管理器在/var/mqm/qmgrs目录下都会有对应文件名的子目录生成;
(至于为什么是/var/mqm,这个配置在安装目录下的mq配置文件中配置samp/mqs.ini)
从这里我们可以确定,队列管理器的创建是一个持久化的操作,当MQ服务器停止后再启动时,队列管理器都还是存在的;

启动队列管理器

启动名为QM_MMEDB的队列管理器:

/opt/mqm/bin$./strmqm QM_MEMDB
>WebSphere MQ queue manager 'QM_MEMDB' started using V7.5.0.0.

(停止mq队列管理器:endmqm)

创建队列

队列及消息属于MQ的对象,MQ的对象管理一般使用mqsc命令交互工具来管理;
对于创建队列的操作,最好先写好放在一个文件里,然后调用;
eg,我们在队列管理器QM_MEMDB中定义一个TEST1队列:

vi define_memdb.tst:
define qlocal (TEST1) DEFPSIST(YES) MAXDEPTH(150000)

然后调用mqsc来创建:

/var/mqm/sh$runmqsc QM_MEMDB < define_memdb.tst > out.txt

创建的结果信息输出到out.txt:

1 : define qlocal (TEST1) DEFPSIST(YES) MAXDEPTH(150000)
AMQ8006: WebSphere MQ queue created.
One MQSC command read.
No commands have a syntax error.
All valid MQSC commands were processed.

向队列中放入消息

基本队列操作命令分成两类, 一类在 MQ Server 端运行, 它们是 amqsput、 amqsget、
amqsbcg。另一类在 MQ Client 端运行,它们是 amqsputc、amqsgetc、amqsbcgc
从Server端将消息放入队列的命令格式:

amqsput   amqsput  QueueName [QueueManagerName]  

amqsput和 amqsputc 可以将消息放入队列中, 程序把之后的每一行标准输入作为一条独立的消息,读到 EOF 或空行时退出。注意,UNIX 上的 EOF 为 Ctrl+D。可以将标准输入重定向到文件。队列中每放入一条消息,队列深度增加一。
eg:

/var/mqm/sh$amqsput TEST1 QM_MEMDB

查看队列中放入的消息

查看队列管理器QM_MEMDB中名为TEST1的队列:

/var/mqm/sh$amqsbcg TEST1 QM_MEMDB

从队列中取出消息

amqsget 和 amqsgetc 可以将消息从队列中全部读出并显示。读空后再等待 15 秒,在这段时间内如果有新的消息到达会一并读出。强行中断该程序用 Ctrl+C 。amqsget 和 amqsgetc 执行后队列应该为空,即队列深度为零。

以上是单个服务器的单个队列管理器中完成的操作,如果需要跨队列管理器或跨机通信,我们需要MQ命令服务器和MQ监听器,当然,少不了建立通道;

MQ命令服务器

WebSphere MQ 命令服务器是队列管理器的一个组件,用来对外来的命令消息进行解释和执行。在远程管理和编程管理的应用中,需要启动命令服务器。一个队列管理器最多只有一个命令服务器,缺省情况下在创建队列管理器时由系统一并创建。
启动与停止:
strmqcsv
endmqcsv
dspmqcsv
启动后执行下,观察状态,看到正在运行:
/opt/mqm/bin$dspmqcsv QM1
WebSphere MQ Command Server Status . . : Running

MQ 监听器

WebSphere MQ 中监听器也是队列管理器的一个组件,用来监听外来的连接请求并相应
地做出反应。监听器通常需要先配置,然后才能运行,配置参数与监听器选择的通信协议有关。当然,也可以在第一次启动监听器时将配置参数传入,隐式地进行配置。一个队列管理器可以有多个监听器,分别应用于不同的通信协议或同一协议的不同参数。比如 TCP/IP 的不同端口。

通道的配置和建立下面单独拿出来讲解;
over。

更多参考

《精通 WebSphere MQ》本书讲解的MQ版本为5.3,有些老,不过操作命令都没有变化;逻辑清晰,还不错;涉及到MQ的新特性,比如发布/订阅方面,就不用看这本书了,转到参考2:
《Application Programming Reference MQV7》

Posted by: 大CC | 03DEC,2013
博客:blog.me115.com
微博:新浪微博

相关文章:

  • Glusterfs3.3.1DHT(hash分布)源代码分析
  • 进入保护模式(一)
  • SmartWatch2开发-ControlSample分析
  • 回车和换行
  • [Jquery] 实现鼠标移到某个对象,在旁边显示层。
  • 【转】Navigation Drawer(导航抽屉)
  • python的zipfile模块记录
  • fedora 19 安装mp3 解析
  • sqlplus使用总结
  • 利用sql语句复制一条或多条记录
  • 一次union all 的优化
  • PDF格式详解
  • win7,redhat双系统安装的一点看法。
  • 解决eclipse中egit中的cannot open git-upload-pack问题
  • 二手笔记本测试软件
  • Codepen 每日精选(2018-3-25)
  • js继承的实现方法
  • Node 版本管理
  • Object.assign方法不能实现深复制
  • Python 反序列化安全问题(二)
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Redis字符串类型内部编码剖析
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • zookeeper系列(七)实战分布式命名服务
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 工程优化暨babel升级小记
  • 关于extract.autodesk.io的一些说明
  • 观察者模式实现非直接耦合
  • 后端_ThinkPHP5
  • 在Unity中实现一个简单的消息管理器
  • No resource identifier found for attribute,RxJava之zip操作符
  • 《天龙八部3D》Unity技术方案揭秘
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #单片机(TB6600驱动42步进电机)
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (三)终结任务
  • (三分钟)速览传统边缘检测算子
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)Google的Objective-C编码规范
  • (转)关于pipe()的详细解析
  • **CI中自动类加载的用法总结
  • .Net Web项目创建比较不错的参考文章
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法