MQ应用程序的开发,简单的实现一下关键的发送消息和接收消息的操作.首先做简单的准备工作,建队列管理器QM1,在QM1中建队列Q1,然后在高级中建立通道BICASHY,类型为服务器连接通道,端口号1414,这里做最简单的配置,死信、传输队列及远程队列都暂时不建。。。
注:如果建另一个队列管理器QM2,其侦听端口一定不能和1414重复。
- package com.wondertek.flow.test;
- import java.io.IOException;
- 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;
- public class MQManager {
- private MQQueueManager qMgr;
- private void getConnMQmanager() {
- MQEnvironment.hostname = "77.20.17.15";// MQ服务器IP
- MQEnvironment.channel = "BICASHY"; // 队列管理器对应的服务器连接通道
- MQEnvironment.CCSID = 1381; // 字符编码
- MQEnvironment.port = 1414; // 队列管理器的端口号
- try {
- qMgr = new MQQueueManager("QM1");// 队列管理器名称
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private void closeConnMQmanager() {
- if (qMgr != null) {
- try {
- qMgr.close();
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- public void sendMsg(String msgStr){
- int openOptions = MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE;
- MQQueue queue = null;
- try {
- //建立Q1通道的连接
- queue = qMgr.accessQueue("Q1", openOptions, null, null,null);
- MQMessage msg = new MQMessage();// 要写入队列的消息
- msg.format = MQC.MQFMT_STRING;
- msg.characterSet = 1381;
- msg.writeObject(msgStr); //将消息写入消息对象中
- MQPutMessageOptions pmo = new MQPutMessageOptions();
- msg.expiry = -1; // 设置消息用不过期
- queue.put(msg, pmo);// 将消息放入队列
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- if(queue!=null){
- try {
- queue.close();
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
- public void receiveMsg()
- {
- int openOptions = MQC.MQOO_INPUT_AS_Q_DEF|MQC.MQOO_OUTPUT|MQC.MQOO_INQUIRE;
- MQQueue queue = null;
- try {
- queue = qMgr.accessQueue("Q1", openOptions, null, null,null);
- System.out.println("该队列当前的深度为:"+queue.getCurrentDepth());
- System.out.println("===========================");
- int depth = queue.getCurrentDepth();
- //将队列的里的消息读出来
- while(depth-->0)
- {
- MQMessage msg = new MQMessage();// 要读的队列的消息
- MQGetMessageOptions gmo = new MQGetMessageOptions();
- queue.get(msg, gmo);
- System.out.println("消息的大小为:"+msg.getDataLength());
- System.out.println("消息的内容:\n"+msg.readObject());
- System.out.println("---------------------------");
- }
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- if(queue!=null){
- try {
- queue.close();
- } catch (MQException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
- public static void main(String[] args) {
- MQManager mm = new MQManager();
- mm.getConnMQmanager();
- try {
- mm.sendMsg("第一条测试信息");
- mm.sendMsg("test第二条测试信息");
- mm.receiveMsg();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- mm.closeConnMQmanager();
- }
- }