《2022年与MQ通讯的完整JAVA程序) .pdf》由会员分享,可在线阅读,更多相关《2022年与MQ通讯的完整JAVA程序) .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1. /* 2. * author Fenglb E-mail: 3. * version 创建时间: 2009-4-30 下午 04:13:38 4. * 类说明5. */ 6. import java.io.IOException; 7. import com.ibm.mq.MQC; 8. import com.ibm.mq.MQEnvironment; 9. import com.ibm.mq.MQException; 10. import com.ibm.mq.MQGetMessageOptions; 11. import com.ibm.mq.MQMessage; 12. impor
2、t com.ibm.mq.MQPutMessageOptions; 13. import com.ibm.mq.MQQueue; 14. import com.ibm.mq.MQQueueManager; 15.16. public class MessageByMQ 17. / 定义队列管理器和 队列的名称18. private static String qmName; 19. private static String qName; 20. private static MQQueueManager qMgr; 21. static 22. /设置环境: 23. /MQEnvironme
3、nt中包含控制 MQQueueManager 对象中的 环境的构成的静态变量, MQEnvironment的值的设定会在 MQQueueManager的构造函数加载的时候起作用,24. /因此必须在建立 MQQueueManager对象之前 设定 MQEnvironment中的值. 25. MQEnvironment.hostname=10.24.1.180; /MQ服务器的 IP 地址26. MQEnvironment.channel=S_FENGLB; /服务器连接的通道27. MQEnvironment.CCSID=1381; /服务器 MQ服务使用的编码 1381代表 GBK、 120
4、8代表UTF(Coded Character Set Identifier:CCSID) 28. MQEnvironment.port= 1414; /MQ端口名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 29. qmName = QM_FENGLB; /MQ的队列管理器名称30. qName = testQ; /MQ远程队列的名称31. try 32. /定义并初始化 队列管理器 对象并连接33. /MQQueueManag
5、er可以被多 线程共享,但是从 MQ获取信息的 时候是同 步的,任何时候只有一个 线程可以和 MQ通信。34. qMgr = new MQQueueManager(qmName); 35. catch (MQException e) 36. / TODO Auto-generated catch block 37. System.out.println( 初使化 MQ 出错); 38. e.printStackTrace(); 39. 40. 41. /* 42. * 往 MQ 发送消息43. * param message 44. * return 45. */ 46. public sta
6、tic int sendMessage(String message) 47. int result= 0; 48. try 49. /设置将要 连接的队列属性50. / Note. The MQC interface defines all the constants used by the WebSphere MQ Java programming interface 51. /(except for completion code constants and error code constants). 52. /MQOO_INPUT_AS_Q_DEF:Open the queue to
7、 get messages using the queue-defined default. 53. /MQOO_OUTPUT:Open the queue to put messages. 54. /*目标为远 程队列,所有这里不可以用 MQOO_INPUT_AS_Q_DEF属性*/ 55. /int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; 56. /*以下选项可适合 远程队列与本地 队列*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
8、 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 57. int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING; 58. /连接队列59. /MQQueue provides inquire, set, put and get operations for WebSphere MQ queues. 60. /The inquire and set capabilities are inherited from MQManagedObject. 61. /*关闭了就重新打 开*/ 62
9、. if(qMgr=null | !qMgr.isConnected() 63. qMgr = new MQQueueManager(qmName); 64. 65. MQQueue queue = qMgr.accessQueue(qName, openOptions); 66. /定义一个简单的消息67. MQMessage putMessage = new MQMessage(); 68. /将数据放入消息 缓冲区69. putMessage.writeUTF(message); 70. /设置写入消息的属性(默 认属性)71. MQPutMessageOptions pmo = new
10、 MQPutMessageOptions(); 72. /将消息写入 队列73. queue.put(putMessage,pmo); 74. queue.close(); 75. catch (MQException ex) 76. System.out.println(A WebSphere MQ error occurred : Completion code 77. + pletionCode + Reason code + ex.reasonCode); 78. ex.printStackTrace(); 79. catch (IOException ex) 80. System.o
11、ut.println(An error occurred whilst writing to the message buffer: + ex); 81. catch(Exception ex) 82. ex.printStackTrace(); 83. finally 84. try 85. qMgr.disconnect(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - 86. catch (MQException e)
12、 87. e.printStackTrace(); 88. 89. 90. return result; 91. 92. /* 93. * 从队列中去 获取消息,如果队列中没有消息,就会 发生异常,不过没有关系,有TRY.CATCH ,如果是第三方程序 调用方法,如果无返回 则说明无消息94. * 第三方可以将 该方法放于一个无限循 环的 while(true). 之中,不需要设置等待,因为在该方法内部在没有消息的 时候会自 动等待。95. * return 96. */ 97. public static String getMessage() 98. String message=null
13、; 99. try 100. /设置将要 连接的 队列属性101. / Note. The MQC interface defines all the constants used by the WebSphere MQ Java programming interface 102. /(except for completion code constants and error code constants). 103. /MQOO_INPUT_AS_Q_DEF:Open the queue to get messages using the queue-defined default. 1
14、04. /MQOO_OUTPUT:Open the queue to put messages. 105. int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT; 106. MQMessage retrieve = new MQMessage(); 107. /设置取出消息的属性(默 认属性)108. /Set the put message options.( 设置放置消息 选项)109. MQGetMessageOptions gmo = new MQGetMessageOptions(); 110. gmo.options
15、 = gmo.options + MQC.MQGMO_SYNCPOINT;/Get messages under sync point control (在同 步点控制下 获取消息)111. gmo.options = gmo.options + MQC.MQGMO_WAIT; / Wait if no messages on the Queue(如果在 队列上没有消息 则等待)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - 1
16、12. gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;/ Fail if Qeue Manager Quiescing(如果 队列管理器停 顿则失败)113. gmo.waitInterval = 1000 ; / Sets the time limit for the wait.( 设置等待的毫秒 时间限制)114. /*关闭了就重新打 开*/ 115. if(qMgr=null | !qMgr.isConnected() 116. qMgr = new MQQueueManager(qmName); 117. 118. MQ
17、Queue queue = qMgr.accessQueue(qName, openOptions); 119. / 从队列中取出消息120. queue.get(retrieve, gmo); 121. message = retrieve.readUTF(); 122. System.out.println(The message is: + message); 123. queue.close(); 124. catch (MQException ex) 125. System.out.println(A WebSphere MQ error occurred : Completion
18、code 126. + pletionCode + Reason code + ex.reasonCode); 127. catch (IOException ex) 128. System.out.println(An error occurred whilst writing to the message buffer: + ex); 129. catch(Exception ex) 130. ex.printStackTrace(); 131. finally 132. try 133. qMgr.disconnect(); 134. catch (MQException e) 135.
19、 e.printStackTrace(); 136. 137. 138. return message; 139. 140. public static void main(String args) 141. /*下面两个方法可同 时使用,也可以单独使用 */ 142. sendMessage(this is a test); 143. /getMessage(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 144. 145. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -