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:[email protected]
 * @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!
==========

你可能感兴趣的:(MQ,Java)