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的安装目录下找到:




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:通道定义有错误:</p>
 * 		解决方式如下:</p>
 * 			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);
        }	
    }
    

}















猜你喜欢

转载自blog.csdn.net/kpp19920121/article/details/52547276