基于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);
    }
}

运行效果:

基于WebSphere MQ的MQ trigger实例_第1张图片
 

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

你可能感兴趣的:(MQ,MQ,trigger,websphere)