WebSphere MQ发送文件范例

最近在研究使用WebSphere MQ发送、接收文件。

package com.genersoft.test;
 import java.io.File;
 import java.io.FileInputStream;
 import com.ibm.mq.MQC;
 import com.ibm.mq.MQEnvironment;
 import com.ibm.mq.MQException;
 import com.ibm.mq.MQMessage;
 import com.ibm.mq.MQPutMessageOptions;
 import com.ibm.mq.MQQueue;
 import com.ibm.mq.MQQueueManager;
 /**
 *
 * @author fts
 * @date 2016-01-22
 * @功能 发送文件
 *
 */
 public class MQFileSender {
 final int BUFFER_LEN = 1024*1024*3;
 private MQQueueManager qmgr;
 private MQQueue outQueue;
 private String queueName = “RECVQ”;
 private String host = “10.24.1.20”;
 private int port = 1414;
 private int ccsid = 1381;
 private String channel = “RECVQCHANNEL”;
 private String qmgrName = “GATEWAY1”;
 private MQMessage outMsg;
 private MQPutMessageOptions pmo;
 private String fileName = “D:\\1.jpg”;
 //private String fileName = “D:\\OperateFile\\New.java”;
 public static void main(String args[]) {
 MQFileSender mfs = new MQFileSender();
 mfs.runGoupSender();
 }
 public void runGoupSender() {
 try {
 init();
 sendGroupMessages();
 qmgr.commit();
 System.out.println(“\n Messages successfully Send “);
 } 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);
 }
 }
 private void init() throws Exception {
 /** 设置MQEnvironment 属性以便客户机连接 */
 MQEnvironment.hostname = host;
 MQEnvironment.channel = channel;
 MQEnvironment.port = port;
 MQEnvironment.CCSID = ccsid;
 // MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSPORT_WEBSPHERE
 // MQ);
 /* 连接到队列管理器 */
 qmgr = new MQQueueManager(qmgrName);
 /* 设置队列打开选项以便输出 */
 int opnOptn = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;
 outQueue = qmgr.accessQueue(queueName, opnOptn, null, null, null);
 }
 public void sendGroupMessages() throws Exception {
 /* 设置放置消息选项 */
 pmo = new MQPutMessageOptions();
 pmo.options = pmo.options + MQC.MQPMO_LOGICAL_ORDER;
 pmo.options = pmo.options + MQC.MQPMRF_GROUP_ID;
 outMsg = new MQMessage();
 /* 设置消息标记,表示该消息属于组 */
 outMsg.messageFlags = MQC.MQMF_MSG_IN_GROUP;
 FileInputStream fis = new FileInputStream(new File(fileName));
 byte buffer[] = new byte[BUFFER_LEN];
 int count = 0;
 while (true) {
 count = fis.read(buffer, 0, BUFFER_LEN);
 if(count == -1){
 break;
 }
 outMsg.write(buffer,0,count);
 if(count < BUFFER_LEN){
 outMsg.messageFlags = MQC.MQMF_LAST_MSG_IN_GROUP;
 }
 outQueue.put(outMsg, pmo);
 outMsg.clearMessage();
 }
 fis.close();
 }
 }

接收文件代码:

package com.genersoft.test;
 import java.io.File;
 import java.io.FileOutputStream;
 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.MQQueue;
 import com.ibm.mq.MQQueueManager;
 /**
 *
 * @author futsh
 * @date 2016-01-22
 * @功能 接收文件
 *
 */
 public class MQFileReceiver {
 private MQQueueManager qmgr;
 private MQQueue inQueue;
 private String queueName = “RECVQ”;
 private String host = “10.24.1.20”;
 private int port = 1414;
 private int ccsid = 1381;
 private String channel = “RECVQCHANNEL”;
 private String qmgrName = “GATEWAY1”;
 private MQMessage inMsg;
 private MQGetMessageOptions gmo;
 private String fileName = “D:\\2.jpg”;
 //private String fileName = “D:\\OperateFile\\mq\\New.java”;
 public static void main(String args[]) {
 MQFileReceiver mfr = new MQFileReceiver();
 mfr.runGoupReceiver();
 }
 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);
 }
 }
 private void init() throws Exception {
 /* 为客户机连接设置MQEnvironment 属 */
 MQEnvironment.hostname = host;
 MQEnvironment.channel = channel;
 MQEnvironment.port = port;
 MQEnvironment.CCSID = ccsid;
 /* 连接到队列管理器 */
 qmgr = new MQQueueManager(qmgrName);
 /* 设置队列打开选项以输 */
 int opnOptn = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING;
 /* 打开队列以输 */
 inQueue = qmgr.accessQueue(queueName, opnOptn, null, null, null);
 }
 public void getGroupMessages() throws Exception {
 /* 设置获取消息选项 */
 gmo = new MQGetMessageOptions();
 gmo.options = MQC.MQGMO_FAIL_IF_QUIESCING;
 gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;
 /* 等待消息 */
 gmo.options = gmo.options + MQC.MQGMO_WAIT;
 /* 设置等待时间限制 */
 gmo.waitInterval = 5000;
 /* 只获取消息*/
 gmo.options = gmo.options + MQC.MQGMO_ALL_MSGS_AVAILABLE;
 /* 以辑顺序获取消息 */
 gmo.options = gmo.options + MQC.MQGMO_LOGICAL_ORDER;
 gmo.matchOptions = MQC.MQMO_MATCH_GROUP_ID;
 /* 创建消息缓冲*/
 inMsg = new MQMessage();
 FileOutputStream fos = new FileOutputStream(new File(fileName));
 /* 处理组消息*/
 while (true) {
 inQueue.get(inMsg, gmo);
 int msgLength = inMsg.getMessageLength();
 byte[] buffer = new byte[msgLength];
 inMsg.readFully(buffer);
 fos.write(buffer, 0, msgLength);
 char x = gmo.groupStatus;
 /*查看是否是最后消息标*/
 if (x == MQC.MQGS_LAST_MSG_IN_GROUP) {
 System.out.println(“Last Msg in Group”);
 break;
 }
 inMsg.clearMessage();
 }
 fos.close();
 }
 }

有时候可能会出现如下错误:

Exception in thread “main” java.lang.NoClassDefFoundError: javax/resource/ResourceException
 at com.ibm.mq.MQEnvironment. <clinit>(MQEnvironment.java:441)
 at com.ibm.mq.pcf.PCFAgent.connect(PCFAgent.java:276)
 at com.ibm.mq.pcf.PCFAgent. <init>(PCFAgent.java:190)
 at com.ibm.mq.pcf.PCFMessageAgent. <init>(PCFMessageAgent.java:160)
 at MQTest.MQTestMain.testName(MQTestMain.java:33)
 at MQTest.MQTestMain.main(MQTestMain.java:17)

解决: 增加 mq_install\java\lib到你的PATH javax/resource/ResourceException 这个类是在connector.jar中

附:connector.jar以及com.ibm.mq.jar

MQ所需jar包

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Danny的专栏

【EJB学习笔记】——建立一个简单的EJB应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

662
来自专栏小尘哥的专栏

springboot使用rabbitMQ(带回调)

配置文件2:RabbitConstants(主要用于用户名、密码等值从配置文件获取,也可以用@Value方式)

706
来自专栏IT笔记

聊一聊生产环境中如何动态监听配置文件变化并重载

上一篇,我们谈到Java中的几种读取properties配置文件的方式,但是在生产环境中,最忌讳的就是重启应用了。比如某个系统的路径常量或者接口变更,需要线上及...

33111
来自专栏吴小龙同學

Saving Data-Saving Files

微言App中有个阅读量的功能,是直接将用户的阅读量保存在SD卡上,我封装成了工具类。 需要权限 1<uses-permission android:n...

2815
来自专栏向治洪

仿qq聊天及定位等

聊天其实就是要实现消息推送,而推送消息就需要保持连接(长连接)。在之前项目里虽然实现了即时聊天,但是一种很本的方法。 去掉了其中的网络访问。地图试用的百度AP...

1726
来自专栏mathor

label、input、button的用法(结尾有彩蛋)

 先引入bootstrap,为了防止每个网页都引入,单独把引入bootstrap写成一个网页,然后在其他网页中用jsp:include动态包含

551
来自专栏SpringBoot

java 监听socket

691
来自专栏程序员宝库

单点登录系统实现

单点登录系统实现基于SpringBoot 今天的干货有点湿,里面夹杂着我的泪水。可能也只有代码才能让我暂时的平静。通过本章内容你将学到单点登录系统和传统登录系统...

69512
来自专栏码匠的流水账

聊聊spring cloud gateway的NettyConfiguration

本文主要研究下spring cloud gateway的NettyConfiguration

1041
来自专栏编程坑太多

『高级篇』docker之开发用户服务EdgeService(13)

PS:其实通过梳理发现这个还是有套路可寻的如何多语言进行通信,先生成对应的语言的代码,然后通过rpc的服务端和客户端,他们之前进行协议话的通信,服务端完成自身的...

754

扫码关注云+社区