java 读取mq_MQ接收队列到本地文件的Java代码详解

MQ接收队列到本地文件

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();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值