1import com.ibm.mq.*; 2import com.ibm.msg.client.wmq.v6.base.internal.MQC; 3import java.io.IOException; 4/** 5 * Created by EalenXie on 2017/2/17. 6 */ 7public class MessageByMQ { 8 //定义队列管理器和队列的名称 9 private static String qmName ; 10 private static String qName ; 11 private static MQQueueManager qMgr ; 12 static { 13 /** 14 * 设置环境: 15 * MQEnvironment中包含控制MQQueueManager对象中的环境的构成的静态变量 16 * MQEnvironment的值的设定会在MQQueueManager的构造函数加载的时候起作用 17 * 因此必须在建立MQQueueManager对象之前设定MQEnvironment中的值. 18 */ 19 MQEnvironment.hostname = "127.0.0.1"; //MQ服务器的IP地址 20 MQEnvironment.channel = "CHL_QM1_SERVER"; //服务器连接的通道 21 //服务器MQ服务使用的编码1381代表GBK、1208代表UTF-8 22 MQEnvironment.CCSID = 1381; 23 MQEnvironment.port = 1415; //MQ 端口 24 qmName = "QM1"; //MQ 的队列管理器名称 25 qName = "QM1_LOCAL"; //MQ 远程队列的名称 26 try { 27 //定义并初始化队列管理器对象并连接 28 //MQQueueManager 可以被多线程共享,但是从MQ 获取信息的时候是同步的,任何时候只有一个线程可以和MQ 通信。 29 qMgr = new MQQueueManager(qmName); 30 } catch (MQException e) { 31 // TODO Auto-generated catch block 32 System.out.println("初使化MQ出错"); 33 e.printStackTrace(); 34 } 35 } 36 /** 37 * 往MQ发送消息 38 * 39 * @param message 40 * @return 41 */ 42 public static int sendMessage(String message) { 43 int result = 0; 44 try { 45 //设置将要连接的队列属性 46 //目标为远程队列,所有这里不可以用MQOO_INPUT_AS_Q_DEF属性 47 //int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; 48 //以下选项可适合远程队列与本地队列 49 int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING; 50 //连接队列 51 //MQQueue provides inquire, set, put and get operations for WebSphere MQ queues. 52 //The inquire and set capabilities are inherited from MQManagedObject. 53 /*关闭了就重新打开*/ 54 if (qMgr == null || !qMgr.isConnected()) { 55 qMgr = new MQQueueManager(qmName); 56 } 57 MQQueue queue = qMgr.accessQueue(qName, openOptions); 58 //定义一个简单的消息 59 MQMessage putMessage = new MQMessage(); 60 //将数据放入消息缓冲区 61 putMessage.writeUTF(message); 62 //设置写入消息的属性(默认属性) 63 MQPutMessageOptions pmo = new MQPutMessageOptions(); 64 //将消息写入队列 65 queue.put(putMessage, pmo); 66 queue.close(); 67 } catch (MQException ex) { 68 System.out.println("A WebSphere MQ error occurred : Completion code " 69 + ex.completionCode + " Reason code " + ex.reasonCode); 70 ex.printStackTrace(); 71 } catch (IOException ex) { 72 System.out.println("An error occurred whilst writing to the message buffer: " + ex); 73 } catch (Exception ex) { 74 ex.printStackTrace(); 75 } finally { 76 try { 77 qMgr.disconnect(); 78 } catch (MQException e) { 79 e.printStackTrace(); 80 } 81 } 82 return result; 83 } 84 /** 85 * 从队列中去获取消息,如果队列中没有消息,就会发生异常,不过没有关系,有TRY...CATCH,如果是第三方程序调用方法,如果无返回则说明无消息 86 * 第三方可以将该方法放于一个无限循环的while(true){...}之中,不需要设置等待,因为在该方法内部在没有消息的时候会自动等待。 87 * 88 * @return 89 */ 90 public static String getMessage() { 91 String message = null; 92 try { 93 //设置将要连接的队列属性 94 int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; 95 MQMessage retrieve = new MQMessage(); 96 //设置取出消息的属性(默认属性) 97 //设置放置消息选项 98 MQGetMessageOptions gmo = new MQGetMessageOptions(); 99 gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT; 100 //在同步点控制下获取消息 101 gmo.options = gmo.options + MQC.MQGMO_WAIT; 102 //如果在队列上没有消息则等待 103 gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING; 104 //如果队列管理器停顿则失败 105 gmo.waitInterval = 1000; //设置等待的毫秒时间限制 106 /*关闭了就重新打开*/ 107 if (qMgr == null || !qMgr.isConnected()) { 108 qMgr = new MQQueueManager(qmName); 109 } 110 MQQueue queue = qMgr.accessQueue(qName, openOptions); 111 // 从队列中取出消息 112 queue.get(retrieve, gmo); 113 message = retrieve.readUTF(); 114 System.out.println("The message is: " + message); 115 queue.close(); 116 } catch (MQException ex) { 117 System.out.println("A WebSphere MQ error occurred : Completion code " 118 + ex.completionCode + " Reason code " + ex.reasonCode); 119 } catch (IOException ex) { 120 System.out.println("An error occurred whilst writing to the message buffer: " + ex); 121 } catch (Exception ex) { 122 ex.printStackTrace(); 123 } finally { 124 try { 125 qMgr.disconnect(); 126 } catch (MQException e) { 127 e.printStackTrace(); 128 } 129 } 130 return message; 131 } 132 public static void main(String args[]) { 133 /*下面两个方法可同时使用,也可以单独使用*/ 134 sendMessage("Hi Java MQ!"); 135 getMessage(); 136 } 137}
ESB
Wesley13
2021-10-11
980 0 0
点赞
收藏
评论区
加载中...