`

基于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
分享到:
评论

相关推荐

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

    本文将深入探讨一个基于WebSphere MQ的简单Java Message Service (JMS) 实例,帮助你理解如何在实际项目中实现消息的发送。 首先,我们需要了解JMS。JMS是Java平台上的一个标准接口,它定义了用于在分布式环境中...

    IBM WebSphere MQ 安装包

    【IBM WebSphere MQ安装包详解】 IBM WebSphere MQ,前身为IBM MQSeries,是IBM公司推出的一款企业级的消息中间件产品。它在信息技术领域扮演着至关重要的角色,为跨网络、操作系统和应用程序提供了高效、安全的...

    IBM WebSphere MQ入门教程.pdf

    IBM WebSphere MQ 是一种基于消息队列的中间件,用于实现不同的应用程序之间的异步通信。下面是对 IBM WebSphere MQ 的入门教程的总结,涵盖了 WebSphere MQ 的原理、体系结构、重要特点和应用场景等方面的知识点。 ...

    IBM WebSphere MQ 技术白皮书.doc

    IBM WebSphere MQ 是一种基于消息队列的中间件产品,可以满足企业的集成需求。该产品具有高效、可靠、灵活和安全等特点,可以帮助企业实现业务集成和自动化。 WebSphere MQ 的特性亮点 WebSphere MQ 的特性亮点...

    WebSphere MQ 多实例部署方案

    WebSphere MQ 多实例部署方案是一种高级别的高可用性(HA)配置,旨在增强消息中间件的稳定性,确保服务在单个实例失败时仍能继续运行。这一特性自MQV7.0.1版本开始引入,是WebSphere MQ产品的一个核心组件。多实例...

    WebSphere MQ简单实例(发送消息)

    本实例将聚焦于WebSphere MQ的基本应用,即“发送消息”。 首先,我们需要了解消息中间件的基本概念。消息中间件作为一个独立的服务,负责在不同的应用程序之间传递数据,使得它们可以解耦并独立工作。WebSphere MQ...

    WebSphereMQ_V7.5.0.2_for_Windows(4-1)

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

    MQ,websphere mq

    通过阅读这些书籍,开发者和系统管理员可以掌握WebSphere MQ的全面知识,从而更好地设计、实施和维护基于MQ的消息传递系统。结合实际项目经验,可以提升解决复杂系统集成问题的能力,为企业信息系统提供高效、可靠的...

    Linux 上的 WebSphere MQ 开发快速入门

    Linux 上的 WebSphere MQ 开发快速入门 本文将介绍如何在 Linux 上安装和配置 WebSphere MQ,以及如何使用 Java 应用程序开发 MQ 环境。本文将通过示例应用程序说明如何向队列发送消息和从队列接收消息。 ...

    [重要]基于Websphere MQ持久化消息实现异步转同步—方案二

    标题中的“基于Websphere MQ持久化消息实现异步转同步—方案二”是指在分布式系统中,通过使用Websphere MQ(WebSphere Message Broker,一种消息中间件)来处理异步通信,并通过消息的持久化特性,确保消息在异常...

    WebSphere MQ 系统管理指南 6.0

    总之,《WebSphere MQ 系统管理指南 6.0》不仅是一份技术手册,更是IT团队在设计、部署和维护基于WebSphere MQ的消息传递解决方案时不可或缺的伙伴。它提供了深入的理论知识、实用的操作指南和先进的策略建议,帮助...

    Websphere MQ入门教程-使用IBM Websphere MQ

    - **消息模型**:WebSphere MQ基于发布/订阅和点对点两种消息传递模式。发布/订阅模式下,生产者发布消息到主题,消费者订阅特定主题接收消息;点对点模式则通过队列实现,消息被发送到队列,一个或多个接收者可以...

    websphere MQ 8.0 自带jar包

    WebSphere MQ 8.0 自带的 JAR 包是一组关键组件,它们构成了 IBM 的消息中间件解决方案,用于在不同应用程序之间可靠地传递数据。这些 JAR 文件位于 `WebSphere MQ\java\lib` 目录下,是开发、配置和运行与 ...

    IBM Websphere MQ入门教程

    Websphere MQ的原理是基于异步通信的机制,使用消息队列来实现不同应用程序之间的数据交换。Websphere MQ的体系结构主要包括三个部分: * 消息队列(Message Queue):用于存储和转发消息的队列 * Queue Manager...

    WebSphere MQ 7.0 .net API 文档

    ### WebSphere MQ 7.0 .NET API:深入解析与应用指南 #### 一、概述与启动 **WebSphere MQ 7.0 .NET API**是IBM为.NET平台开发的一套高级消息队列接口,旨在简化.NET应用程序与WebSphere MQ(一种高性能的消息...

    Java下操作IBM Websphere MQ的项目案例

    在IT行业中,IBM WebSphere MQ(也称为IBM MQ)是一种广泛使用的中间件,它允许应用程序在不同的网络协议、操作系统和硬件之间可靠地交换消息。在这个“Java下操作IBM Websphere MQ的项目案例”中,我们将探讨如何...

    WebSphere MQ介绍教程

    6. 简化的使用和配置:v7版本特别强化了易用性,新的图形化客户端配置工具,如基于Eclipse的WebSphere MQ Explorer,大大简化了配置过程。 7. 跨平台支持:能够运行在多种操作系统之上,支持企业内部的异构计算环境...

    非常全面的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教程...

Global site tag (gtag.js) - Google Analytics