`

基于WebSphere MQ的MQ trigger实例

阅读更多

        WebSphere MQ的配置请参考配置IBM WEBSPHERE MQ触发器中的方法二,唯一要改的是定义进程,定义进程改为如下:

DEFINE PROCESS('JAVA.PROCESS') REPLACE +
DESCR('Process to test triggering') +
APPLICID('java -classpath E:/MQTrigger/MQTrigger.jar com.bijian.study.JavaTrigger')

        由java -classpath E:/MQTrigger/MQTrigger.jar com.bijian.study.JavaTrigger可知,我将如下工程代码导出为MQTrigger.jar放到了E盘的MQTrigger目录下。

 

JavaTrigger.java

package com.bijian.study;

import java.io.IOException;

import com.ibm.mq.MQC;
import com.ibm.mq.MQException;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class JavaTrigger {

    private static Logger logger = LogManager.getLogger(JavaTrigger.class.getName());
    
    private MQQueueManager qMgr;

    public static void main(String args[]) throws IOException {
        if (args.length < 1) {
            logger.info("This must be a triggered application"); 
        } else {
            JavaTrigger jt = new JavaTrigger();
            jt.start(args);
        }
        System.exit(0);
    }

    public void start(String args[]) {
        try {

            MQException.log = null;

            /******************************************************/
            /* Create a MQTrigger class object to read the MQTMC2 */
            /* structure into the correct attribute. */
            /******************************************************/
            MQTrigger tmc = new MQTrigger(args[0]);

            /******************************************************/
            /* Connect to the queue manager identified by the */
            /* trigger. */
            /******************************************************/

            qMgr = new MQQueueManager(tmc.getQueueManagerName());

            /******************************************************/
            /* Open the queue identified by the trigger. */
            /******************************************************/

            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING;

            MQQueue triggerQueue = qMgr.accessQueue(tmc.getQueueName(), openOptions, null, null, null);

            /******************************************************/
            /* Set up our options to get the first message */
            /* Wait 5 seconds to be cetain all messages are */
            /* processed. */
            /******************************************************/
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.options = MQC.MQGMO_WAIT | MQC.MQGMO_CONVERT;
            gmo.waitInterval = 5000;

            MQMessage triggerMessage = new MQMessage();

            /*****************************************************/
            /* Read each message from the queue until there are */
            /* no more messages to get. */
            /*****************************************************/
            long rc = 0;
            do {
                rc = 0;
                try {
                    /***********************************************/
                    /* Set the messageId and correlationId to none */
                    /* to get all messages with no message */
                    /* selection. */
                    /***********************************************/
                    triggerMessage.clearMessage();
                    triggerMessage.correlationId = MQC.MQCI_NONE;
                    triggerMessage.messageId = MQC.MQMI_NONE;

                    triggerQueue.get(triggerMessage, gmo);
                    String msg = triggerMessage.readString(triggerMessage.getMessageLength());

                    /***********************************************/
                    /* Insert business logic for the message here. */
                    /* For this sample, echo the first 20 */
                    /* characters of the message. */
                    /***********************************************/
                    if (msg.length() > 20) {
                        logger.info("Message: " + msg.substring(0, 20)); 
                    } else {
                        logger.info("Message: " + msg); 
                    }

                } catch (MQException mqEx) {
                    rc = mqEx.reasonCode;
                    if (rc != MQException.MQRC_NO_MSG_AVAILABLE) {
                        logger.info(" PUT Message failed with rc = " + rc);
                    }
                } catch (Exception ex) {
                    logger.info("Generic exception: " + ex);
                    rc = 1;
                }

            } while (rc == 0);

            /**********************************************************/
            /* Cleanup MQ resources prior to exiting. */
            /**********************************************************/
            triggerQueue.close();
            qMgr.disconnect();
        }

        catch (MQException mqEx) {
            logger.info("MQ failed with completion code = " + mqEx.completionCode + " and reason code = "
                    + mqEx.reasonCode);
        }
    }
}

MQTrigger.java

package com.bijian.study;

class MQTrigger {

    private String structId;
    private String version;
    private String qName;
    private String processName;
    private String triggerData;
    private String applType;
    private String applId;
    private String envData;
    private String userData;
    private String qMgrName;

    /******************************************************/
    /* Constructor to parse the MQTMC2 stucture and set */
    /* the class attributes. */
    /* Values derived from field definitions given for */
    /* MQTMC2 in the WebSphere Application Programming */
    /* Reference. */
    /******************************************************/
    public MQTrigger(String tmcStruct) throws StringIndexOutOfBoundsException {

        structId = tmcStruct.substring(0, 3).trim();
        version = tmcStruct.substring(4, 8).trim();
        qName = tmcStruct.substring(8, 55).trim();
        processName = tmcStruct.substring(56, 103).trim();
        triggerData = tmcStruct.substring(104, 167).trim();
        applType = tmcStruct.substring(168, 171).trim();
        applId = tmcStruct.substring(172, 427).trim();
        envData = tmcStruct.substring(428, 555).trim();
        userData = tmcStruct.substring(556, 683).trim();
        qMgrName = tmcStruct.substring(684, 730).trim();

    }

    public String getStructId() {
        return (structId);
    }

    public String getVersion() {
        return (version);
    }

    public String getQueueName() {
        return (qName);
    }

    public String getProcessName() {
        return (processName);
    }

    public String getTriggerData() {
        return (triggerData);
    }

    public String getApplicationType() {
        return (applType);
    }

    public String getApplicationId() {
        return (applId);
    }

    public String getEnvironmentData() {
        return (envData);
    }

    public String getUserData() {
        return (userData);
    }

    public String getQueueManagerName() {
        return (qMgrName);
    }
}

运行效果:


 

参考文章:http://www.cnblogs.com/windows/archive/2012/09/25/2701613.html

  • 大小: 55 KB
分享到:
评论

相关推荐

    IBM WebSphere MQ 安装包

    IBM WebSphere MQ是IBM业界领先面向消息的中间件产品,也是MQ系列产品的基础和核心,它使不同的应用程序能够以企业级的性能,在广泛的平台上安全而可靠地通讯。

    Websphere MQ入门教程

    6.2.4 WebSphere MQ对象配置实例 81 6.3通道的维护 83 6.3.1通道的状态 83 6.3.2通道维护命令 84 6.3.3设置MaxChannels和MaxActiveChannels属性 88 6.4配置侦听程序 88 6.4.1 Windows 平台 88 6.4.2 unix 平台 88 ...

    WebSphere MQ自学笔记

    本人自学IBM的WebSphereMQ自学笔记,内有MQ安装文档,建MQ的例子等。 1、 MQ6.0安装 2 1.1 启动MQ v6.0 安装程序 2 1.2 软件需求检查 2 1.3 WebSphere Eclipse Platform V3.0.1软件安装 2 1.4 网络配置检查 3 1.5 ...

    Websphere MQ入门教程7

    全书共分为3部分共14章,第一部分 WebSphere MQ原理和体系结构,分为两章;第二部分 WebSphere MQ系统管理,分为六章,分别介绍安装、配置、管理、控制命令和问题确定;第三部分 WebSphere MQ应用开发,由五章组成,...

    非常全面的WebsphereMQ的PDF学习资料

    个人收集整理,非常全面的WebsphereMQ的PDF学习资料。Websphere MQ Programming Guide,Websphere MQ Using C++,WebSphere MQ Using Java,WEBSPHERE MQ6.0 JAVA编程,WebSphere MQ基础教程,IBM WEBSPHERE MQ教程...

    WebSphereMQ_V7.5.0.2_for_Windows(4-1)

    WebSphere® MQ (也称MQSeries)以一致的、可靠的和易于管理的方式来连接应用程序,并为跨部门、企业范围的集成提供了可靠的基础。通过为重要的消息和事务提供可靠的、一次且仅一次的传递,Websphere MQ 可以处理...

    WebSphere MQ 多实例部署方案

    多实例队列管理器特征是MQV7.0.1版本之后引进的新特征,它是MQ产品的内置功能,丰富了 MQ 高可用性的解决方案。 用户可以在不同机器上定义并启动此队列管理器的多个实例,包括一个活动实例和一个备用实例。 激活的...

    基于WebSphere MQ发送消息的简单JMS实例

    NULL 博文链接:https://bijian1013.iteye.com/blog/2308734

    WebSphereMQ_V7.5.0.2_for_Windows.part2.rar

    WebSphere® MQ (也称MQSeries)以一致的、可靠的和易于管理的方式来连接应用程序,并为跨部门、企业范围的集成提供了可靠的基础。通过为重要的消息和事务提供可靠的、一次且仅一次的传递,Websphere MQ 可以处理...

    WebSphere MQ 开发培训

    WebSphere MQ 开发培训 IBM软件部 软件部 WebSphere MQ 议程 WebSphere MQ 概览 WebSphere MQ 安装配置 WebSphere MQ 应用开发 WebSphere MQ 参考

    IBM Websphere MQ 教程之备份与恢复

    IBM Websphere MQ 教程之备份与恢复

    IBM Websphere mq安装

    IBM Websphere mq安装IBM Websphere mq安装

    WebSphere MQ V7.0 jar

    WebSphere_MQ_V7.0.1.3 安装目录下\java\doc;\java\lib;\java\lib64. 包含com.ibm.mq.jar,com.ibm.mq.jmqi.jar,com.ibm.mq.axis2.jar,com.ibm.mq.commonservices.jar等等

    IBM WebSphere MQ 简介和概述

    WebSphere MQ 所能解决的业务问题的种类,并了解 WebSphere MQ 如何能够帮助您满足业务要求。

    IBM Websphere MQ入门教程.doc

    第一部分 Websphere MQ原理和体系结构 第一章Websphere MQ原理 目标 1, 了解什么是中间件,以及中间件的特点。 2, 介绍WebSphere MQ的原理。 3, 介绍WebSphere MQ的特性和优点。 1.1中间件 中间件处于应用软件和...

    websphere mq常用命令

    websphere mq常用命令 websphere mq常用命令

    WebSphere MQ

    WebSphere MQ WebSphere MQWebSphere MQ WebSphere MQ

Global site tag (gtag.js) - Google Analytics