java远程连接ibm mq实现发送和接受消息

1.相关jar包:

com.ibm.mq.commonservices.jar

com.ibm.mq.headers.jar

com.ibm.mq.jar

com.ibm.mq.jmqi.jar

connector.jar

junit-4.4.jar

相关jar可以在ibm mq的安装目录下找到:



java远程连接ibm mq实现发送和接受消息_第1张图片

java远程连接ibm mq实现发送和接受消息_第2张图片

2.在mq服务器上创建相应的队列管理器,和队列,以及服务器传输通道。附上操作命令:

--启动队列管理器
strmqm  QMEMBFE

--启动监听
runmqlsr -m QMEMBFE -p 1414 -t tcp &

--用户交互管理界面程序
runmqsc  QMEMBFE
--创建本地队列
DEFINE QLOCAL (Q1)
--创建名称为DC.SVRCONN的服务器连接通道
DEFINE CHANNEL(DC.SVRCONN) CHLTYPE (SVRCONN) REPLACE
--删除通道
DELETE CHANNEL(DC.SVRCONN)

3.使用java编写调用程序:


运行方法:单元测试运行:testMQ


MessageByMQ

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

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;
/**
 * 列出常用的錯誤碼:如下:
 * 2540:通道定义有错误:

* 解决方式如下:

* 1.进入用户交互界面:runmqsc QMEMBFE(QMEMBFE为队列管理器名称) * 2.创建相应的服务器连接通道:DEFINE CHANNEL(DC.SVRCONN) CHLTYPE (SVRCONN) REPLACE * 2035:授权相关错误:解决方式如下: * 进入用户交互界面:(同上): * ALTER CHANNEL(DC.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('mqm') * 说明:DC.SVRCONN 服务器连接通道名称 mqm为ibm mq用户名称 * * * * * @author kefan * */ public class MessageByMQ { /** * 队列管理器的名称 */ private String qManagerName="QMEMBFE"; /** * 队列管理器 */ private MQQueueManager qMgr; /** * 队列名称 */ private String queueName="Q1"; /** * 队列 */ private MQQueue qQueue; /** * mq服务器所在的主机名称 */ private String hostname="192.168.233.134"; /** * 服务器连接通道名称 */ private String channelName="DC.SVRCONN"; /** * 监听器监听的端口 */ private int port=1414; /** * 传输的编码类型 */ private int CCSID = 1381; @Before public void init(){ try { MQEnvironment.hostname = this.hostname; // 安裝MQ所在的ip address MQEnvironment.port = this.port; // TCP/IP port MQEnvironment.channel = this.channelName; MQEnvironment.CCSID = CCSID; qMgr = new MQQueueManager(this.qManagerName); int qOptioin = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE | MQC.MQOO_OUTPUT; qQueue = qMgr.accessQueue(queueName, qOptioin); } catch (MQException e) { e.printStackTrace(); } } /** * 发送信息 */ public void SendMsg(byte[] qByte) { try { MQMessage qMsg = new MQMessage(); qMsg.write(qByte); MQPutMessageOptions pmo = new MQPutMessageOptions(); qQueue.put(qMsg, pmo); System.out.println("The message is sent!"); System.out.println("\tThe message is " + new String(qByte, "GBK")); } catch (MQException e) { e.printStackTrace(); System.out .println("A WebSphere MQ error occurred : Completion code " + e.completionCode + " Reason Code is " + e.reasonCode); } catch (java.io.IOException e) { e.printStackTrace(); System.out .println("An error occurred whilst to the message buffer " + e); } } /** * 从消息队列取数据 */ public void GetMsg() { try { MQMessage retrievedMessage = new MQMessage(); MQGetMessageOptions gmo = new MQGetMessageOptions(); gmo.options += MQC.MQPMO_SYNCPOINT; qQueue.get(retrievedMessage, gmo); int length = retrievedMessage.getDataLength(); byte[] msg = new byte[length]; retrievedMessage.readFully(msg); String sMsg = new String(msg,"GBK"); System.out.println(sMsg); } catch (RuntimeException e) { e.printStackTrace(); } catch (MQException e) { e.printStackTrace(); if (e.reasonCode != 2033) // 没有消息 { e.printStackTrace(); System.out .println("A WebSphere MQ error occurred : Completion code " + e.completionCode + " Reason Code is " + e.reasonCode); } } catch (java.io.IOException e) { System.out .println("An error occurred whilst to the message buffer " + e); } } /** * 单元测试方法 */ @Test public void testMQ(){ MessageByMQ mqst = new MessageByMQ(); mqst.init(); try { mqst.SendMsg("你好,Webshpere MQ 7.5!".getBytes("GBK")); mqst.GetMsg(); } catch (Exception e) { e.printStackTrace(); } } /** * 释放资源 */ @After public void release(){ try { qQueue.close(); qMgr.disconnect(); } catch (MQException e) { System.out .println("A WebSphere MQ error occurred : Completion code " + e.completionCode + " Reason Code is " + e.reasonCode); } } }















你可能感兴趣的:(java,EE)