package com.travelsky.receive;import java.io.BufferedReader;import java.io.IOException;import java.io.StringReader;import msmqToJms.com.janic.MsmqSender;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;import com.ibm.mq.MQC;import com.ibm.mq.MQEnvironment;import com.ibm.mq.MQException;import com.ibm.mq.MQGetMessageOptions;import com.ibm.mq.MQMessage;import com.ibm.mq.MQPutMessageOptions;import com.ibm.mq.MQQueue;import com.ibm.mq.MQQueueManager;import com.travelsky.consts.Const;import com.travelsky.main.Travelsky;/** * 用来接收一条消息 非文件 * @author Administrator * */public class ReceiveMsg { Logger logger; public ReceiveMsg(){ PropertyConfigurator.configure(Const.LOGPATH); logger = Logger.getLogger(ReceiveMsg. class ); } /** * 发送消息测试用 * @param givenHostName * @param givenChannel * @param givenQueueName * @param givenQueueManagerName * @param givenPort * @throws Exception */ public void sender(String givenHostName, String givenChannel, String givenQueueName, String givenQueueManagerName, int givenPort) { String hostName = givenHostName; String channel = givenChannel; String queueManagerName = givenQueueManagerName; String queueName = givenQueueName; int port = givenPort; MQQueue queue = null; MQEnvironment.hostname = hostName; MQEnvironment.channel = channel; MQEnvironment.port = port; MQEnvironment.CCSID = 1381; int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;//建立打开方式 MQQueueManager qMgr = null; try { qMgr = new MQQueueManager(Const.QMANAGERNAME_IBM); } catch (MQException e) { logger.error(e.getMessage() + " ---- 无法与IBM WEBSPHERE MQ 消息队列管理器连接,请检查消息队列管理器名字是否正确!"); } try { queue = qMgr.accessQueue(Const.QQUEUENAME_IBM, openOptions); } catch (MQException e) { logger.error(e.getMessage()+" ---- 无法与IBM WEBSPHERE MQ 消息队列连接,请检查消息队列名字是否正确!"); }//连接队列 MQPutMessageOptions pmo = new MQPutMessageOptions();//创建消息的放入方式 MQMessage message = new MQMessage();// 创建MQ消息实例 try { message.writeObject(new Travelsky().i + ""); } catch (IOException e) { logger.error(e.getMessage() + " ---- 将消息写入MQMessage对象是出现IO异常,"); } try { queue.put(message, pmo); } catch (MQException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { qMgr.commit(); } catch (MQException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private MsmqSender ms; private String msg ;/** * 从服务器上获取消息 * @param givenHostName * @param givenChannel * @param givenQueueName * @param givenQueueManagerName * @param givenPort */ public void receiver(String givenHostName, String givenChannel, String givenQueueName, String givenQueueManagerName, int givenPort) { ms = new MsmqSender(Const.LOGPATH); String hostName = givenHostName; String channel = givenChannel; String queueManagerName = givenQueueManagerName; String queueName = givenQueueName; int port = givenPort; MQQueueManager queueManager = null; MQQueue queue = null; try { /* MQEnvironment初始化 */ MQEnvironment.hostname = hostName;//设置主机 MQEnvironment.channel = channel;//设置主机通道 MQEnvironment.port = port;//设置端口 MQEnvironment.CCSID = 1381; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);//设置操作消息 /* 连接到队列管理器 */ queueManager = new MQQueueManager(queueManagerName); /* 设置打开选项以便打开用于输出的队列,如果队列管理器已经停止,设置应对不成功的情况 */ int openOptions = MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING; /* 打开队列 */ queue = queueManager.accessQueue(queueName, openOptions, null, null, null); /* 设置放置消息选项 */ MQGetMessageOptions gmo = new MQGetMessageOptions(); /* 在同步点控制下获取消息 */ gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT; /* 如果在队列上没有消息则等待 */ gmo.options = gmo.options + MQC.MQGMO_WAIT; /* 如果队列管理器停顿则失败 */ gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING; /* 设置等待时间间隔 */ gmo.waitInterval = 3000; /* 创建MQMessage类 */ MQMessage inMsg = new MQMessage(); /* 从队列到消息缓冲区获取消息 */ queue.get(inMsg, gmo); /* 从消息读取用户数据 */ try { msg = (String) inMsg.readObject(); //发送获取的msg到msmq服务器上 if(msg.trim().equals("")|| msg.trim().equals(null)) { logger.info(msg + ": 服务器端队列中没有消息或是消息内容为空!"); return; } else { /**一行一行读取获取到得字符串,然后再发送出去*/ StringReader sr = new StringReader(msg); BufferedReader br = new BufferedReader(sr); String str = ""; while((str = br.readLine()) != null) { ms.sendMsg(str, Const.DLLPATH, Const.HOSTNAME_MSMQ, Const.QTYPE_MSMQ, Const.QNAME_MSMQ, Const.ACCESSTYPE_MSMQ, Const.SHARETYPE_MSMQ, Const.TIMEOUT_MSMQ); logger.info(msg); } //关闭流 br.close(); sr.close(); } } catch (ClassNotFoundException e) { logger.error(e.getMessage()); } /* 提交事务 */ queueManager.commit(); } catch (MQException ex) { String erro = "An MQ Error Occured:Completion Code is :t" + ex.completionCode + "nn The reason code is:t" + ex.reasonCode; logger.error(erro); } catch (IOException ioe) { logger.error(ioe.getMessage()); } finally { try { if (queue != null) { queue.close(); } if (queueManager != null) { queueManager.close(); queueManager.disconnect(); } } catch (MQException mqe) { logger.error(mqe.getMessage()); } } }}这是我的代码 一个方法是想mq中发送消息 另一个是从mq中获取消息 然后再将获取到得消息发送到MSMQ中
我的代码好像确实没有释放资源 不知道怎么释放 我这个程序是7*24小时不停的运转的
2011-04-18 11:06:29 [ Timer-0:388632 ] - [ ERROR ] An MQ Error Occured:Completion Code is : 2
The reason code is: 2059
这是log错误收起