最近有个项目要对Windows平台上的IBM MQ进行监控,要求用VBSctript实现(便于从MOM中调用),本以为很简单,没想到却很麻烦。主要是因为IBM对Windows平台的COM支持比较少,网上的文档和例子也比较少。用COM接口访问IBM MQ,需要注意以下问题:
1。IBM提供两种主要的COM接口:MQAX(WebSphere MQ Automation Classes for ActiveX classes)和MQAI(ActiveX interface to the MQAI)。MQAX提供对队列管理器、队列的访问,包括MQSession、MQQueueManager 、MQQueue、MQMessage、MQPutMessageOptions、MQGetMessageOptions、MQDistributionList、MQDistributionListItem等类,但通过MQAX无法直接访问Channel和Listener等信息。如果想监控Channel和Listener的状态,要通过MQAI提供的MQBag类。(具体参考IBM文档http://publibfp.boulder.ibm.com/epubs/pdf/amqtan03.pdf)
2。MQBag类的使用要按照PCF命令规范设置不同参数,并取得返回值。(具体参考IBM手册http://publibfp.boulder.ibm.com/epubs/pdf/csqzac05.pdf)
3。我们的IBM MQ安装在英文版windows 2003上,操作系统区域设置为简体中文,队列管理器的CCSID设置为819。MQBag类没有提供设置CCSID的办法,所以使用操作系统的缺省字符集936,但936无法转换为CCSID 819。所以,一调用MQBag类的ADD方法加入字符型Item,就会报错mqrc_not_converted。即使设置环境变量set ccsid=819也不起作用。所以脚本中使用了特殊的方法来设定MQBag的字符集(详见例子)。
4。Channel的不活动状态和Listener的停止状态在系统中无法取得,这对于监控来说,也是要关注的状态,程序