java结合WebSphere MQ实现接收队列文件功能_java

首先我们先来简单介绍下websphere mq以及安装使用简介

websphere mq  : 用于传输信息 具有跨平台的功能。

1 安装websphere mq 并启动

2 websphere mq 建立 queue Manager (如:MQSI_SAMPLE_QM)

3 建立queue 类型选择 Local类型 的 (如lq  )

4 建立channels 类型选择Server Connection (如BridgeChannel)

接下来,我们来看实例代码:

MQFileReceiver.java

package com.mq.dpca.file;

import java.io.File;
import java.io.FileOutputStream;

import com.ibm.mq.MQEnvironment;
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 com.ibm.mq.constants.MQConstants;
import com.mq.dpca.msg.MQConfig;
import com.mq.dpca.util.ReadCmdLine;
import com.mq.dpca.util.RenameUtil;

/**
 *
 * MQ分组接收文件功能
 * 主动轮询
 */
public class MQFileReceiver {
  private MQQueueManager qmgr; // 连接到队列管理器

  private MQQueue inQueue; // 传输队列

  private String queueName = ""; // 队列名称

  private String host = ""; //

  private int port = 1414; // 侦听器的端口号

  private String channel = ""; // 通道名称

  private String qmgrName = ""; // 队列管理器

  private MQMessage inMsg; // 创建消息缓冲

  private MQGetMessageOptions gmo; // 设置获取消息选项

  private static String fileName = null; // 接收队列上的消息并存入文件

  private int ccsid = 0;

  private static String file_dir = null;

  /**
   * 程序的入口
   *
   * @param args
   */
  public static void main(String args[]) {
    MQFileReceiver mfs = new MQFileReceiver();
    //初始化连接
    mfs.initproperty();
    //接收文件
    mfs.runGoupReceiver();
    //获取shell脚本名
//   String shellname = MQConfig.getValueByKey(fileName);
//   if(shellname!=null&&!"".equals(shellname)){
//     //调用shell
//     ReadCmdLine.callShell(shellname);
//   }else{
//     System.out.println("have no shell name,Only receive files.");
//   }

  }

  public void runGoupReceiver() {
    try {
      init();
      getGroupMessages();
      qmgr.commit();
      System.out.println("\n Messages successfully Receive ");
    } catch (MQException mqe) {
      mqe.printStackTrace();
      try {
        System.out.println("\n Backing out Transaction ");
        qmgr.backout();
        System.exit(2);
      } catch (Exception e) {
        e.printStackTrace();
        System.exit(2);
      }
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(2);
    }
  }

  /**
   * 初始化服务器连接信息
   *
   * @throws Exception
   */
  private void init() throws Exception {
    /* 为客户机连接设置MQEnvironment属性 */
    MQEnvironment.hostname = host;
    MQEnvironment.channel = channel;
    MQEnvironment.port = port;

    /* 连接到队列管理器 */
    qmgr = new MQQueueManager(qmgrName);

    /* 设置队列打开选项以输 */
    int opnOptn = MQConstants.MQOO_INPUT_AS_Q_DEF
        | MQConstants.MQOO_FAIL_IF_QUIESCING;

    /* 打开队列以输 */
    inQueue = qmgr.accessQueue(queueName, opnOptn, null, null, null);
  }

  /**
   * 接受文件的主函数
   *
   * @throws Exception
   */
  public void getGroupMessages() {
    /* 设置获取消息选项 */
    gmo = new MQGetMessageOptions();
    gmo.options = MQConstants.MQGMO_FAIL_IF_QUIESCING;
    gmo.options = gmo.options + MQConstants.MQGMO_SYNCPOINT;
    /* 等待消息 */
    gmo.options = gmo.options + MQConstants.MQGMO_WAIT;
    /* 设置等待时间限制 */
    gmo.waitInterval = 5000;
    /* 只获取消息 */
    gmo.options = gmo.options + MQConstants.MQGMO_ALL_MSGS_AVAILABLE;
    /* 以辑顺序获取消息 */
    gmo.options = gmo.options + MQConstants.MQGMO_LOGICAL_ORDER;
    gmo.matchOptions = MQConstants.MQMO_MATCH_GROUP_ID;
    /* 创建消息缓冲 */
    inMsg = new MQMessage();
    try {
      FileOutputStream fos = null;
      /* 处理组消息 */
      while (true) {
        try {
          inQueue.get(inMsg, gmo);
          if (fos == null) {
            try {
              fileName = inMsg.getStringProperty("fileName");
              String fileName_full = null;
              fileName_full = file_dir + RenameUtil.rename(fileName);
              fos = new FileOutputStream(new File(fileName_full));
              int msgLength = inMsg.getMessageLength();
              byte[] buffer = new byte[msgLength];
              inMsg.readFully(buffer);
              fos.write(buffer, 0, msgLength);
              /* 查看是否是最后消息标识 */
              char x = gmo.groupStatus;
              if (x == MQConstants.MQGS_LAST_MSG_IN_GROUP) {
                System.out.println("Last Msg in Group");
                break;
              }
              inMsg.clearMessage();

            } catch (Exception e) {
              System.out
                  .println("Receiver the message without property,do nothing!");
              inMsg.clearMessage();
            }
          } else {
            int msgLength = inMsg.getMessageLength();
            byte[] buffer = new byte[msgLength];
            inMsg.readFully(buffer);
            fos.write(buffer, 0, msgLength);
            /* 查看是否是最后消息标识 */
            char x = gmo.groupStatus;
            if (x == MQConstants.MQGS_LAST_MSG_IN_GROUP) {
              System.out.println("Last Msg in Group");
              break;
            }
            inMsg.clearMessage();
          }
        } catch (Exception e) {
          char x = gmo.groupStatus;
          if (x == MQConstants.MQGS_LAST_MSG_IN_GROUP) {
            System.out.println("Last Msg in Group");
          }
          break;
        }
      }
      if (fos != null)
        fos.close();
    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }

  public void initproperty() {
    MQConfig config = new MQConfig().getInstance();
    if (config.getMQ_MANAGER() != null) {
      qmgrName = config.getMQ_MANAGER();
      queueName = config.getMQ_QUEUE_NAME();
      channel = config.getMQ_CHANNEL();
      host = config.getMQ_HOST_NAME();
      port = Integer.valueOf(config.getMQ_PROT());
      ccsid = Integer.valueOf(config.getMQ_CCSID());
      file_dir = config.getFILE_DIR();
    }
  }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索mq
, websphere
远程队列
mq接收队列收不到消息、websphere mq、websphere mq 下载、websphere mq教程、ibm websphere mq,以便于您获取更多的相关知识。

时间: 2024-07-31 20:45:59

java结合WebSphere MQ实现接收队列文件功能_java的相关文章

Java函数式编程(十二):监控文件修改_java

使用flatMap列出子目录 前面已经看到如何列出指定目录下的文件了.我们再来看下如何遍历指定目录的直接子目录(深度为1),先实现一个简单的版本,然后再用更方便的flatMap()方法来实现. 我们先用传统的for循环来遍历一个指定的目录.如果子目录中有文件,就添加到列表里:否则就把子目录添加到列表里.最后,打印出所有文件的总数.代码在下面--这个是困难模式的. 复制代码 代码如下: public static void listTheHardWay() {      List<File> f

Websphere MQ能实现这样的功能吗?在线等

问题描述 客户端向MQ服务器发消息,消息一到就马上读取,传到一个存储过程中计算.计算完后将结果发回客户端. 解决方案 解决方案二:可以实现的,需要实现MQ消息的读取并传送到存储过程,然后写回处理结果到队列解决方案三:MQ支持trigger方式,你可以用这种方式来得到消息,进行处理.解决方案四:我刚刚接触MQ不怎么懂.请问具体的我要怎么做呀?解决方案五:http://www.webspherechina.net/club/viewthread.php?tid=4315&extra=page%3D1

java组件smartupload实现上传文件功能_java

使用jsp和serlvet来实现最简单的上传,供大家参考,具体内容如下 1.页面index.jsp <%@ page language="java" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":

加拿大乐透网凭借WebSphere MQ冲击性能颠峰

ALC 位于新布伦兹维克的孟頓市,是大西洋加拿大省新布伦兹维克.纽芬兰和拉布拉多.新斯科舍和爱德华王子岛省共同拥有的. 通过彩票零售终端,ALC 处理 3,000 多个零售商店.加油站和其它代理的彩票交易. 其最流行的游戏 Lotto 6/49 为游戏选手提供了只需 1 美元就能立刻成为百万富翁的机会. "http://www.aliyun.com/zixun/aggregation/13387.html">WebSphere MQ 大概为我们节约了几十万美元,我们将这些资金投入

使用Java API处理WebSphere MQ大消息

WebSphere MQ 中处理大消息的方法 使用过 WebSphere MQ 的读者都知道,WebSphere MQ 对处理的单条消息的大小是有限制的,目前支持的最大消息是100M,而且,随着消息大小的增大,WebSphere MQ 处理的性能也会随之下降.从最佳实践来说,WebSphere MQ 传输大小为几K的消息其效率是最高的.那如何使 WebSphere MQ 能高效的处理大消息呢? WebSphere MQ 提供了处理大消息的两种方法:消息分片和消息分组.下面我们来看在使用 Java

IBM WebSphere MQ创建队列管理器前的系统级操作

您可以通过本文了解 z/OS 的子系统基本配置和启动流程,以及 MQ 需要的所有定制化操作.作为该系列的第 1 部分,本文着重介绍创建队列管理器前的系统级操作. IBM 主机及其之上的 z/OS 操作系统,是在上世纪 60 年代 IBM 主机平台之上不断积累进化的产物.发展到今日,该环境已经演变为如今商业计算领域最为高效.稳定.可靠的计算机 IT 环境之一.如今,越来越多的银行.金融.电信.交通等行业领域意识到主机系统相比于开放式服务器系统的优势,并投入到主机的怀抱中来. 此外,IBM WebS

IBM WebSphere MQ帮助用户了解队列管理器迁移的场景

一旦在迁移过程中出现问题,客户总是会以最高的优先级来要求 IBM 支持团队给予最高的重视.迁移问题通常很复杂,涉及面很多,需要收集很多的日志文件协助分析.对于 http://www.aliyun.com/zixun/aggregation/13387.html">WebSphere MQ 来说,最重要的迁移对象是队列管理器.本文通过概念与实例的结合,帮助用户了解队列管理器迁移的场景.使用户熟悉各种情况下对队列管理器的迁移有所掌握. 通常来说,有两种方式可以对 MQ 队列管理器进行迁移.一种

MQ Visual Edit 1.6.0发布 WebSphere MQ队列管理器工具

MQ Visual Edit 是一款http://www.aliyun.com/zixun/aggregation/18736.html">允许用户在WebSphere MQ队列管理器中查看.操作和管理信息的工具,并显示类似于一个数据库实用程序或电子表格程序的简化格式的数据.它应用于程序开发员.JMS开发.质量保证测试人员和生产技术支持人员.它可以运行在任何平台上,支持Java 1.4(或更高版本),可以连接到本地队列管理器或任何远程队列管理器. MQ Visual Edit 1.6.0该

MQ Visual Edit 1.5.2发布 WebSphere MQ队列管理器工具

MQ Visual Edit是一款http://www.aliyun.com/zixun/aggregation/18736.html">允许用户在WebSphere MQ队列管理器中查看.操作和管理信息的工具,并显示类似于一个数据库实用程序或电子表格程序的简化格式的数据.它应用于程序开发员.JMS开发.质量保证测试人员和生产技术支持人员.它可以运行在任何平台上,支持Java 1.4(或更高版本),可以连接到本地队列管理器或任何远程队列管理器. 关于WebSphere WebSphere