Java调用MQ队列

IBM MQ 6.0中设置两个队列,(远程队列、通道之类都不设置)。

队列管理器是XIR_QM_1502

队列名称是ESBREQ

IP地址是10.23.117.134(远程的一台电脑,跟我的电脑不在一个局域网内)

端口1414

CCSID 1208

MQ配置可以参考这个,有配图http://wenku.baidu.com/view/06d108d0360cba1aa811daa3.html

程序如下,发送线程两个,接收线程一个。接收完毕后就结束。

[java] view plaincopy

  1. /*
  2. * 创建日期 2012-7-10
  3. *
  4. * TODO 要更改此生成的文件的模板,请转至
  5. * 窗口 - 首选项 - Java - 代码样式 - 代码模板
  6. */
  7. package yerasel;
  8. /**
  9. * @author Fenglb E-mail:[email protected]
  10. * @version 创建时间:2009-4-30 下午04:13:38 类说明
  11. */
  12. import java.io.IOException;
  13. import com.ibm.mq.MQC;
  14. import com.ibm.mq.MQEnvironment;
  15. import com.ibm.mq.MQException;
  16. import com.ibm.mq.MQGetMessageOptions;
  17. import com.ibm.mq.MQMessage;
  18. import com.ibm.mq.MQPutMessageOptions;
  19. import com.ibm.mq.MQQueue;
  20. import com.ibm.mq.MQQueueManager;
  21. interface SomeConstants {
  22. String qManager = "XIR_QM_1502";//"XIR_QM"; //QueueManager name
  23. String qName = "ESBREQ";// Queue Name
  24. String strIP = "10.23.117.134";//"10.24.28.139";//"10.24.28.102";
  25. int iPort = 1502;//1414;
  26. String strChl = "SYSTEM.DEF.SVRCONN";// Server-Connection Channel
  27. int iCCSID = 1208;
  28. }
  29. class Sender implements Runnable, SomeConstants {
  30. public void run() {
  31. sendMessage();
  32. }
  33. public void sendMessage() {
  34. String name = Thread.currentThread().getName();
  35. System.out.println("进入线程" + name);
  36. MQQueueManager qMgr = null;
  37. // configure connection parameters
  38. MQEnvironment.hostname = strIP;
  39. // Server name or IP
  40. MQEnvironment.port = iPort;
  41. MQEnvironment.channel = strChl;
  42. MQEnvironment.CCSID = iCCSID;
  43. // java程序连接mq的方式有两种,一是客户机方式,一是绑定方式,
  44. // 默认是客户机方式,当mq部署在本地的时候,就需要用绑定方式
  45. // 本机IP是10.24.28.139连接10.23.117.134的时候不需要下句
  46. //MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,
  47. //MQC.TRANSPORT_MQSERIES_BINDINGS);
  48. // Create a connection to the QueueManager
  49. System.out.println(name + " Connecting to queue manager: " + qManager);
  50. try {
  51. qMgr = new MQQueueManager(qManager);
  52. // Set up the options on the queue we wish to open
  53. int openOptions = MQC.MQMT_REQUEST | MQC.MQPMO_NEW_MSG_ID
  54. | MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING
  55. | MQC.MQOO_INPUT_AS_Q_DEF;
  56. // Now specify the queue that we wish to open and the open options
  57. System.out.println(name + " Accessing queue: " + qName);
  58. MQQueue queue = qMgr.accessQueue(qName, openOptions);
  59. // Define a simple WebSphere MQ Message ...
  60. // Specify the default put message options
  61. MQPutMessageOptions pmo = new MQPutMessageOptions();
  62. // Put the message to the queue
  63. System.out.println(name + " Sending a message...");
  64. MQMessage msg = new MQMessage();
  65. msg.messageId = "MSGID".getBytes();
  66. msg.messageType = MQC.MQMT_REQUEST;
  67. msg.replyToQueueName = "ESBREQ";
  68. // 在此测试一下 mq 的传输次列
  69. for (int j = 1; j < 5; j++) {
  70. msg.messageSequenceNumber = j;
  71. // write some text in UTF8 format
  72. try {
  73. String str = "Salemetsizbe Yerasel";
  74. str = str + " " + j;
  75. msg.writeUTF(str);
  76. queue.put(msg, pmo);
  77. msg.clearMessage();
  78. System.out.println(name + " putting the message... " + j);
  79. } catch (MQException mqe) {
  80. mqe.printStackTrace();
  81. break;
  82. } catch (IOException e1) {
  83. e1.printStackTrace();
  84. }
  85. }
  86. qMgr.commit();
  87. System.out.println(name + " Done!");
  88. System.out.println("==========");
  89. System.out.println("");
  90. } catch (MQException e) {
  91. e.printStackTrace();
  92. }
  93. }
  94. }
  95. class Receiver implements Runnable, SomeConstants {
  96. public void run() {
  97. recvMessage();
  98. }
  99. public void recvMessage() {
  100. String name = Thread.currentThread().getName();
  101. try {
  102. Thread.sleep(1000);
  103. MQQueueManager qMgr = null;
  104. System.out.println("进入线程" + name);
  105. System.out.println(name + " Connecting to queue manager: "
  106. + qManager);
  107. qMgr = new MQQueueManager(qManager);
  108. // 设置将要连接的队列属性
  109. // Note. The MQC interface defines all the constants used by the
  110. // WebSphere MQ Java programming interface
  111. // (except for completion code constants and error code constants).
  112. // MQOO_INPUT_AS_Q_DEF:Open the queue to get messages using the
  113. // queue-defined default.
  114. // MQOO_OUTPUT:Open the queue to put messages.
  115. int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT
  116. | MQC.MQOO_INQUIRE;
  117. // Now get the message back again. First define a WebSphere MQ
  118. // message to receive the data
  119. MQMessage rcvMessage = new MQMessage();
  120. // Specify default get message options
  121. MQGetMessageOptions gmo = new MQGetMessageOptions();
  122. gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;// Get messages
  123. // under sync point
  124. // control(在同步点控制下获取消息)
  125. gmo.options = gmo.options + MQC.MQGMO_WAIT; // Wait if no messages
  126. // on the
  127. // Queue(如果在队列上没有消息则等待)
  128. gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;// Fail if
  129. // Qeue
  130. // Manager
  131. // Quiescing(如果队列管理器停顿则失败)
  132. gmo.waitInterval = 1000; // Sets the time limit for the
  133. // wait.(设置等待的毫秒时间限制)
  134. System.out.println(name + " Accessing queue: " + qName);
  135. MQQueue queue = qMgr.accessQueue(qName, openOptions);
  136. int depth = 0;
  137. // Get the message off the queue.
  138. System.out.println("... " + name + " getting the message back again");
  139. for (;;) {
  140. try {
  141. queue.get(rcvMessage, gmo);
  142. System.out.println(" ID: "
  143. + (new String(rcvMessage.messageId)).trim()
  144. + " Num: " + rcvMessage.messageSequenceNumber
  145. + " Type: " + rcvMessage.messageType + " Flag: "
  146. + rcvMessage.messageFlags);
  147. // And display the message text...
  148. String msgText = rcvMessage.readUTF();
  149. System.out.println("The message is: " + msgText);
  150. rcvMessage.clearMessage();
  151. // Break if no MSG left in queue
  152. depth = queue.getCurrentDepth();
  153. if (depth == 0)
  154. break;
  155. } catch (MQException mqe) {
  156. mqe.printStackTrace();
  157. break;
  158. // null;
  159. } catch (IOException e) {
  160. e.printStackTrace();
  161. }
  162. }
  163. // Close the queue
  164. System.out.println(name + " Closing the queue");
  165. queue.close();
  166. // Disconnect from the QueueManager
  167. System.out.println(name + " Disconnecting from the Queue Manager");
  168. qMgr.disconnect();
  169. System.out.println(name + " Done!");
  170. System.out.println("==========");
  171. System.out.println("");
  172. } catch (MQException ex) {
  173. System.out
  174. .println("A WebSphere MQ Error occured : Completion Code "
  175. + ex.completionCode + " Reason Code "
  176. + ex.reasonCode + ex.getMessage());
  177. } catch (InterruptedException e1) {
  178. e1.printStackTrace();
  179. }
  180. }
  181. }
  182. public class MQTest {
  183. public static void main(String args[]) {
  184. /*
  185. * MQTest first = new MQTest(); first.sendMessage();
  186. * first.recvMessage();
  187. */
  188. Sender sender = new Sender();
  189. Thread senderThread = new Thread(sender);
  190. senderThread.start();
  191. senderThread.setName("Sender");
  192. Thread senderThread2 = new Thread(sender);
  193. senderThread2.start();
  194. senderThread2.setName("Sender2");
  195. Receiver recv = new Receiver();
  196. Thread recvThread = new Thread(recv);
  197. recvThread.start();
  198. recvThread.setName("Receiver");
  199. // Receiver recv = new Receiver();
  200. // new Thread(recv).start();
  201. }
  202. }

运行结果如下:

进入线程Sender2
进入线程Sender
Sender2 Connecting to queue manager: XIR_QM_1502
Sender Connecting to queue manager: XIR_QM_1502
Sender2 Accessing queue: ESBREQ
Sender2 Sending a message...
Sender Accessing queue: ESBREQ
Sender Sending a message...
Sender2 putting the message... 1
Sender putting the message... 1
Sender2 putting the message... 2
Sender putting the message... 2
Sender2 putting the message... 3
Sender putting the message... 3
Sender2 putting the message... 4
Sender putting the message... 4
Sender2 Done!
==========

Sender Done!
==========

进入线程Receiver
Receiver Connecting to queue manager: XIR_QM_1502
Receiver Accessing queue: ESBREQ
... Receiver getting the message back again
 ID: MSGID Num: 1 Type: 1 Flag: 0
The message is: Salemetsizbe Yerasel 1
 ID: MSGID Num: 1 Type: 1 Flag: 0
The message is: Salemetsizbe Yerasel 1
 ID: MSGID Num: 1 Type: 1 Flag: 0
The message is: Salemetsizbe Yerasel 2
 ID: MSGID Num: 1 Type: 1 Flag: 0
The message is: Salemetsizbe Yerasel 2
 ID: MSGID Num: 1 Type: 1 Flag: 0
The message is: Salemetsizbe Yerasel 3
 ID: MSGID Num: 1 Type: 1 Flag: 0
The message is: Salemetsizbe Yerasel 3
 ID: MSGID Num: 1 Type: 1 Flag: 0
The message is: Salemetsizbe Yerasel 4
 ID: MSGID Num: 1 Type: 1 Flag: 0
The message is: Salemetsizbe Yerasel 4
Receiver Closing the queue
Receiver Disconnecting from the Queue Manager
Receiver Done!
==========

Java调用MQ队列

时间: 2024-10-10 21:36:54

Java调用MQ队列的相关文章

JAVA 调用MQ

前提:MQ服务器端创建 队列管理器:QueueManager 队列:XML.IN 服务器连接通道:SYSTEM.ADMIN.SVRCONN 监听器监听1414端口. package mq; import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.MQGetMessageOptions; import com.ibm.mq.MQMessage; import com.ibm.mq.MQPutMessageO

MQ队列管理器搭建(一)

多应用单MQ使用场景 如上图所示,MQ独立安装,或者与其中一个应用同处一机.Application1与Application2要进行通信,但因为跨系统,所以引入中间件来实现需求. Application1需要连接MQ,并将消息放入队列Queue中,Application2同样连接MQ,监听在Queue队列上,一旦发现有消息进入则取出该消息进行处理. 下面将给出创建队列管理器和队列的示例: 定义队列管理器名称为Qm1,本地队列名称为Queue,服务器连接通道CHAN_SERVER_CON,监听端口

Java调用SMSLib发送短信详解

项目中需要用到发送短信功能,之前没做过这方面,找人咨询了一下,也网上查了查,发现并不是很复杂.目前项目已经完成了,做个记录以备后用.程序中发送短信主要有4种方法: 1.向当地的运营商申请网关,不需要额外的设备,利用对方提供的 API调用程序发送短信,适用于大型的通信公司.稳定,速度快,适合短信量特别大的需求,需要连接到运营商的网络中,不适合内网项目. 2.短信猫发送短信,借助像 GSM MODEM之类的设备(支持AT指令的手机也行),通过数据线连接电脑来发送短信,这种方法比较适用于小公司及个人.

Java多线程 阻塞队列和并发集合

转载:大关的博客 Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容.在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃.Java为多线程专门提供了特有的线程安全的集合类,通过下面的学习,您需要掌握这些集合的特点是什么,底层实现如何.在何时使用等问题. 3.1 BlockingQueue接口 java阻塞队列应用于生产者消费者模式.消息传递.并行任务执行和相关并发设计的大多数常见使用上下文. BlockingQueue在Queue接口基础上提供了额外

MQ队列管理

分享一段代码,很实用. 下面这段java代码是我在国外一个论坛上发现的,源地址已经忘了.代码的作用是可以删除正在使用的mq的队列消息,管理mq的人一定知道它的美妙了吧,哈哈. 我拿来改了下,增加了2个参数支持:ccsid和channel.上代码: 1 import java.util.Hashtable; 2 import com.ibm.mq.*; 3 4 /** 5 * A simply Java class to destructively read (delete) all messag

读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理

本文将通过一个演示工程来快速上手java调用HDFS的常见操作.接下来以创建文件为例,通过阅读HDFS的源码,一步步展开HDFS相关原理.理论知识的说明. 说明:本文档基于最新版本Hadoop3.2.1 目录 一.java调用HDFS的常见操作 1.1.演示环境搭建 1.2.操作HDFS 1.3.java文件操作常用方法 二.深入了解HDFS写文件的流程和HDFS原理 2.1.Hadoop3.2.1 源码下载及介绍 2.2.文件系统:FileSystem 2.3.HDFS体系结构:namenod

Java调用WebService 接口 实例

这里给大家介绍一下,Java调用webservice的一个实例的过程. 本项目不能运行,因为接口地址不可用. 这里只是给大家介绍一个过程,同时留作自己的笔记.如果要学习,可以参照别人的实例.比较好. ①选择项目根目录的src ,右键,new --> webservice client 然后输入地址: http://172.18.100.52:456/hello?wsdl 必须要加wsdl结尾,这样才是一个webservice的接口. finlish.这时候刷新项目.可以看到项目下/src/com

java 调用 keytool 生成keystore 和 cer 证书

keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) 可信任的证书实体(trusted certificate entries)——只包含公钥 ailas(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写 下面给出一

java调用phantomjs采集ajax加载生成的网页

java调用phantomjs采集ajax加载生成的网页 日前有采集需求,当我把所有的对应页面的链接都拿到手,准备开始根据链接去采集(写爬虫爬取)对应的终端页的时候,发觉用程序获取到的数据根本没有对应的内容,可是我的浏览器看到的内容明明是有的,于是浏览器查看源代码也发觉没有,此时想起该网页应该是ajax加载的.不知道ajax的小朋友可以去学下web开发啦. 采集ajax生成的内容手段不外乎两种.一种是通过http观察加载页面时候的请求,然后我们模仿该请求去得到对应的内容,第二种则是模仿浏览器行为