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
程序如下,发送线程两个,接收线程一个。接收完毕后就结束。
- /*
- * 创建日期 2012-7-10
- *
- * TODO 要更改此生成的文件的模板,请转至
- * 窗口 - 首选项 - Java - 代码样式 - 代码模板
- */
- package yerasel;
- /**
- * @author Fenglb E-mail:56553655@163.com
- * @version 创建时间:2009-4-30 下午04:13:38 类说明
- */
- 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;
- interface SomeConstants {
- String qManager = "XIR_QM_1502";//"XIR_QM"; //QueueManager name
- String qName = "ESBREQ";// Queue Name
- String strIP = "10.23.117.134";//"10.24.28.139";//"10.24.28.102";
- int iPort = 1502;//1414;
- String strChl = "SYSTEM.DEF.SVRCONN";// Server-Connection Channel
- int iCCSID = 1208;
- }
- class Sender implements Runnable, SomeConstants {
- public void run() {
- sendMessage();
- }
- public void sendMessage() {
- String name = Thread.currentThread().getName();
- System.out.println("进入线程" + name);
- MQQueueManager qMgr = null;
- // configure connection parameters
- MQEnvironment.hostname = strIP;
- // Server name or IP
- MQEnvironment.port = iPort;
- MQEnvironment.channel = strChl;
- MQEnvironment.CCSID = iCCSID;
- // java程序连接mq的方式有两种,一是客户机方式,一是绑定方式,
- // 默认是客户机方式,当mq部署在本地的时候,就需要用绑定方式
- // 本机IP是10.24.28.139连接10.23.117.134的时候不需要下句
- //MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,
- //MQC.TRANSPORT_MQSERIES_BINDINGS);
- // Create a connection to the QueueManager
- System.out.println(name + " Connecting to queue manager: " + qManager);
- try {
- qMgr = new MQQueueManager(qManager);
- // Set up the options on the queue we wish to open
- int openOptions = MQC.MQMT_REQUEST | MQC.MQPMO_NEW_MSG_ID
- | MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING
- | MQC.MQOO_INPUT_AS_Q_DEF;
- // Now specify the queue that we wish to open and the open options
- System.out.println(name + " Accessing queue: " + qName);
- MQQueue queue = qMgr.accessQueue(qName, openOptions);
- // Define a simple WebSphere MQ Message ...
- // Specify the default put message options
- MQPutMessageOptions pmo = new MQPutMessageOptions();
- // Put the message to the queue
- System.out.println(name + " Sending a message...");
- MQMessage msg = new MQMessage();
- msg.messageId = "MSGID".getBytes();
- msg.messageType = MQC.MQMT_REQUEST;
- msg.replyToQueueName = "ESBREQ";
- // 在此测试一下 mq 的传输次列
- for (int j = 1; j < 5; j++) {
- msg.messageSequenceNumber = j;
- // write some text in UTF8 format
- try {
- String str = "Salemetsizbe Yerasel";
- str = str + " " + j;
- msg.writeUTF(str);
- queue.put(msg, pmo);
- msg.clearMessage();
- System.out.println(name + " putting the message... " + j);
- } catch (MQException mqe) {
- mqe.printStackTrace();
- break;
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- qMgr.commit();
- System.out.println(name + " Done!");
- System.out.println("==========");
- System.out.println("");
- } catch (MQException e) {
- e.printStackTrace();
- }
- }
- }
- class Receiver implements Runnable, SomeConstants {
- public void run() {
- recvMessage();
- }
- public void recvMessage() {
- String name = Thread.currentThread().getName();
- try {
- Thread.sleep(1000);
- MQQueueManager qMgr = null;
- System.out.println("进入线程" + name);
- System.out.println(name + " Connecting to queue manager: "
- + qManager);
- qMgr = new MQQueueManager(qManager);
- // 设置将要连接的队列属性
- // Note. The MQC interface defines all the constants used by the
- // WebSphere MQ Java programming interface
- // (except for completion code constants and error code constants).
- // MQOO_INPUT_AS_Q_DEF:Open the queue to get messages using the
- // queue-defined default.
- // MQOO_OUTPUT:Open the queue to put messages.
- int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT
- | MQC.MQOO_INQUIRE;
- // Now get the message back again. First define a WebSphere MQ
- // message to receive the data
- MQMessage rcvMessage = new MQMessage();
- // Specify default get message options
- MQGetMessageOptions gmo = new MQGetMessageOptions();
- gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;// Get messages
- // under sync point
- // control(在同步点控制下获取消息)
- gmo.options = gmo.options + MQC.MQGMO_WAIT; // Wait if no messages
- // on the
- // Queue(如果在队列上没有消息则等待)
- gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;// Fail if
- // Qeue
- // Manager
- // Quiescing(如果队列管理器停顿则失败)
- gmo.waitInterval = 1000; // Sets the time limit for the
- // wait.(设置等待的毫秒时间限制)
- System.out.println(name + " Accessing queue: " + qName);
- MQQueue queue = qMgr.accessQueue(qName, openOptions);
- int depth = 0;
- // Get the message off the queue.
- System.out.println("... " + name + " getting the message back again");
- for (;;) {
- try {
- queue.get(rcvMessage, gmo);
- System.out.println(" ID: "
- + (new String(rcvMessage.messageId)).trim()
- + " Num: " + rcvMessage.messageSequenceNumber
- + " Type: " + rcvMessage.messageType + " Flag: "
- + rcvMessage.messageFlags);
- // And display the message text...
- String msgText = rcvMessage.readUTF();
- System.out.println("The message is: " + msgText);
- rcvMessage.clearMessage();
- // Break if no MSG left in queue
- depth = queue.getCurrentDepth();
- if (depth == 0)
- break;
- } catch (MQException mqe) {
- mqe.printStackTrace();
- break;
- // null;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- // Close the queue
- System.out.println(name + " Closing the queue");
- queue.close();
- // Disconnect from the QueueManager
- System.out.println(name + " Disconnecting from the Queue Manager");
- qMgr.disconnect();
- System.out.println(name + " Done!");
- System.out.println("==========");
- System.out.println("");
- } catch (MQException ex) {
- System.out
- .println("A WebSphere MQ Error occured : Completion Code "
- + ex.completionCode + " Reason Code "
- + ex.reasonCode + ex.getMessage());
- } catch (InterruptedException e1) {
- e1.printStackTrace();
- }
- }
- }
- public class MQTest {
- public static void main(String args[]) {
- /*
- * MQTest first = new MQTest(); first.sendMessage();
- * first.recvMessage();
- */
- Sender sender = new Sender();
- Thread senderThread = new Thread(sender);
- senderThread.start();
- senderThread.setName("Sender");
- Thread senderThread2 = new Thread(sender);
- senderThread2.start();
- senderThread2.setName("Sender2");
- Receiver recv = new Receiver();
- Thread recvThread = new Thread(recv);
- recvThread.start();
- recvThread.setName("Receiver");
- // Receiver recv = new Receiver();
- // new Thread(recv).start();
- }
- }
运行结果如下:
进入线程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队列的更多相关文章
- MQ队列管理器搭建(一)
多应用单MQ使用场景 如上图所示,MQ独立安装,或者与其中一个应用同处一机.Application1与Application2要进行通信,但因为跨系统,所以引入中间件来实现需求. Applicat ...
- Java多线程 阻塞队列和并发集合
转载:大关的博客 Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容.在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃.Java为多线程专门提供了特有的 ...
- Spark(四十四):使用Java调用spark-submit.sh(支持 --deploy-mode client和cluster两种方式)并获取applicationId
之前也介绍过使用yarn api来submit spark任务,通过提交接口返回applicationId的用法,具体参考<Spark2.3(四十):如何使用java通过yarn api调度sp ...
- Java 中的队列 Queue
一.队列的定义 我们都知道队列(Queue)是一种先进先出(FIFO)的数据结构,Java中定义了java.util.Queue接口用来表示队列.Java中的Queue与List.Set属于同一个级别 ...
- MQ队列及常见操作
一. 创建MQ队列管理器 1.1准备工作 到所安装websphere mq的机子上,进入/opt/mm/bin目录下,查询相关mq的情况,通过命令行./dspmq. 创建mq队列管理器的的时候要用mq ...
- 读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理
本文将通过一个演示工程来快速上手java调用HDFS的常见操作.接下来以创建文件为例,通过阅读HDFS的源码,一步步展开HDFS相关原理.理论知识的说明. 说明:本文档基于最新版本Hadoop3.2. ...
- java中有界队列的饱和策略(reject policy)
文章目录 AbortPolicy DiscardPolicy DiscardOldestPolicy CallerRunsPolicy 使用Semaphore java中有界队列的饱和策略(rejec ...
- Java集合--阻塞队列及各种实现的解析
阻塞队列(Blocking Queue) 一.队列的定义 说的阻塞队列,就先了解下什么是队列,队列也是一种特殊的线性表结构,在线性表的基础上加了一条限制:那就是一端入队列,一端出队列,且需要遵循FIF ...
- Java:阻塞队列
Java:阻塞队列 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. 概述 概念 队列 队列就可以想成是一个数组,从一头进入,一头出去,排队买饭 阻塞队列 B ...
随机推荐
- 关于使用QTcpSocket的一些总结
QTcpSocket类的方法connectToHost会泄露内存,即使把调用这个方法的QTcpSocket实例delete掉,内存也不会释放!反复connectToHost会导致段错误,十分危险.必须 ...
- JDBC Statement对象执行批量处理实例
以下是使用Statement对象的批处理的典型步骤序列 - 使用createStatement()方法创建Statement对象. 使用setAutoCommit()将自动提交设置为false. 使用 ...
- Linq“条件排序”
StockQuantities.OrderBy(u=>u.Status==null) 该排序先排结果为0(false)的,再排结果为1(true)的 使用场景: 一个对象有上传时间(可以为空)和 ...
- 使用ConcurrentLinkedQueue惨痛的教训【转】
转自:http://blog.csdn.net/jackpk/article/details/49634577 服务端原本有个定时任务对一个集合ArrayList 中的消息做处理. 因为考虑到处理消息 ...
- Python——eventlet.websocket
使用该模块可以方便地创建 websocket 服务器,要创建一个websocket服务器,只需要将一个句柄函数用装饰器 WebSocketWSGI 装饰即可,然后这个函数就可以当做一个WSGI应用: ...
- HDU 3455 Leap Frog(线性DP)
Problem Description Jack and Jill play a game called "Leap Frog" in which they alternate t ...
- Jedis客户端操作redis缓存命令详解
1.对value操作的命令 exists(key):确认一个key是否存在 del(key):删除一个key type(key):返回值的类型 keys(pattern):返回满足给定pattern的 ...
- 关于ARM NEON学习的一些资料
在对基于ARM-v7处理器及以上的程序进行优化时,可以使用neon优化技术来加速程序.不过搞这个的人比较少,所以网上有用的资料很稀少.我翻了半天国内国外的博客,发现还是ARM公司的帮助网站最有用: h ...
- Windows 2008禁止IE增强安全配置修改安全设置方法
windows 2008更改IE安全设置 在默认状态下,使用Windows Server 2008系统自带的IE浏览器访问网页内容时,我们时常发现页面内容显示不全.后来,我们进入IE浏览器的Inter ...
- php脚本超时 结束执行代码
函数:stream_context_create ,file_get_content 创建并返回一个文本数据流并应用各种选项,可用于fopen(),file_get_contents()等过程的超时设 ...