ibm mq java 发布订阅,JMS调用IBM MQ 监听模式的点对点模式

JMS调用IBM MQ 监听方式的点对点模式

前面三篇,第一篇讲了安装IBM MQ时遇到的一些问题。第二篇讲了点对点模式的调用。第三篇讲了发布订阅模式。本篇说一下监听模式。

监听模式只是在消费者端监听就可以了。对于消息发布者,代码不用做改动。改动的代码用标签标注(代码不能修改颜色?):

package test2;

// SCCSID "@(#) MQMBID sn=p000-L120604 su=_H-IvIK4nEeGko6IWl3MDhA pn=MQJavaSamples/jms/JmsConsumer.java"

/*

*

* notice="lm-source-program"

* pids="5724-H72,5655-R36,5655-L82,5724-L26,"

* years="2008,2012"

* crc="39457954" >

* Licensed Materials - Property of IBM

*

* 5724-H72,5655-R36,5655-L82,5724-L26,

*

* (C) Copyright IBM Corp. 2008, 2012 All Rights Reserved.

*

* US Government Users Restricted Rights - Use, duplication or

* disclosure restricted by GSA ADP Schedule Contract with

* IBM Corp.

*

*/

import javax.jms.Connection;

import javax.jms.Destination;

import javax.jms.JMSException;

import javax.jms.Message;

import javax.jms.MessageConsumer;

import javax.jms.MessageListener;

import javax.jms.Session;

import javax.jms.TextMessage;

import com.ibm.msg.client.jms.JmsConnectionFactory;

import com.ibm.msg.client.jms.JmsFactoryFactory;

import com.ibm.msg.client.wmq.WMQConstants;

/**

* A JMS consumer (receiver or subscriber) application that receives a message from the named

* destination (queue or topic).

*

* Tip: A subscriber application must be started before the publisher application.

*

* Notes:

*

* API type: IBM JMS API (v1.1, unified domain)

*

* Messaging domain: Point-to-point or Publish-Subscribe

*

* Provider type: WebSphere MQ

*

* Connection mode: Client connection

*

* JNDI in use: No

*

* Usage:

*

* JmsConsumer -m queueManagerName -d destinationName [-h host -p port -l channel]

*

* for example:

*

* JmsConsumer -m QM1 -d Q1

*

* JmsConsumer -m QM1 -d topic://foo -h localhost -p 1414

*/

public class JmsConsumer {

private static String host = "localhost";

private static int port = 1414;

private static String channel = "SYSTEM.DEF.SVRCONN";

private static String queueManagerName = null;

private static String destinationName = null;

private static boolean isTopic = true;

private static int timeout = 15000; // in ms or 15 seconds

// System exit status value (assume unset value to be 1)

private static int status = 1;

/**

* Main method

*

* @param args

*/

public static void main(String[] args) {

// Parse the arguments

args = new String[]{"-m","QMTest", "-d","testQueue"};

parseArgs(args);

// Variables

Connection connection = null;

Session session = null;

Destination destination = null;

MessageConsumer consumer = null;

try {

// Create a connection factory

JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);

JmsConnectionFactory cf = ff.createConnectionFactory();

// Set the properties

cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, host);

cf.setIntProperty(WMQConstants.WMQ_PORT, port);

cf.setStringProperty(WMQConstants.WMQ_CHANNEL, channel);

cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);

cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, queueManagerName);

// Create JMS objects

connection = cf.createConnection();

session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

if (isTopic) {

destination = session.createTopic(destinationName);

}

else {

destination = session.createQueue(destinationName);

}

consumer = session.createConsumer(destination);

// Start the connection

connection.start();

consumer.setMessageListener(new MessageListener(){

public void onMessage(Message m) {

//如果想收到完整的消息“

System.out.println(m);

//如果想收到消息内容,执行下面的代码

TextMessage textMsg = (TextMessage) m;

try {

System.out.println(textMsg.getText());

} catch (JMSException e) {

e.printStackTrace();

}

}

});

// And, receive the message

//在指定的超市时间内接收下一条消息

// Message message = consumer.receive(timeout);

// if (message != null) {

// System.err.println("Received message:

" + message);

System.out.println("Received message:

" + message);

// }

// else {

// System.out.println("No message received!

");

// recordFailure(null);

// }

recordSuccess();

}

catch (JMSException jmsex) {

recordFailure(jmsex);

}

finally {

if (consumer != null) {

try {

consumer.close();

}

catch (JMSException jmsex) {

System.out.println("Consumer could not be closed.");

recordFailure(jmsex);

}

}

if (session != null) {

try {

session.close();

}

catch (JMSException jmsex) {

System.out.println("Session could not be closed.");

recordFailure(jmsex);

}

}

if (connection != null) {

try {

connection.close();

}

catch (JMSException jmsex) {

System.out.println("Connection could not be closed.");

recordFailure(jmsex);

}

}

}

System.exit(status);

return;

} // end main()

/**

* Process a JMSException and any associated inner exceptions.

*

* @param jmsex

*/

private static void processJMSException(JMSException jmsex) {

System.out.println(jmsex);

Throwable innerException = jmsex.getLinkedException();

if (innerException != null) {

System.out.println("Inner exception(s):");

}

while (innerException != null) {

System.out.println(innerException);

innerException = innerException.getCause();

}

return;

}

/**

* Record this run as successful.

*/

private static void recordSuccess() {

System.out.println("SUCCESS");

status = 0;

return;

}

/**

* Record this run as failure.

*

* @param ex

*/

private static void recordFailure(Exception ex) {

if (ex != null) {

if (ex instanceof JMSException) {

processJMSException((JMSException) ex);

}

else {

System.out.println(ex);

}

}

System.out.println("FAILURE");

status = -1;

return;

}

/**

* Parse user supplied arguments.

*

* @param args

*/

private static void parseArgs(String[] args) {

try {

int length = args.length;

if (length == 0) {

throw new IllegalArgumentException("No arguments! Mandatory arguments must be specified.");

}

if ((length % 2) != 0) {

throw new IllegalArgumentException("Incorrect number of arguments!");

}

int i = 0;

while (i < length) {

if ((args[i]).charAt(0) != '-') {

throw new IllegalArgumentException("Expected a '-' character next: " + args[i]);

}

char opt = (args[i]).toLowerCase().charAt(1);

switch (opt) {

case 'h' :

host = args[++i];

break;

case 'p' :

port = Integer.parseInt(args[++i]);

break;

case 'l' :

channel = args[++i];

break;

case 'm' :

queueManagerName = args[++i];

break;

case 'd' :

destinationName = args[++i];

break;

default : {

throw new IllegalArgumentException("Unknown argument: " + opt);

}

}

++i;

}

if (queueManagerName == null) {

throw new IllegalArgumentException("A queueManager name must be specified.");

}

if (destinationName == null) {

throw new IllegalArgumentException("A destination name must be specified.");

}

// Whether the destination is a queue or a topic. Apply a simple check.

if (destinationName.startsWith("topic://")) {

isTopic = true;

}

else {

// Otherwise, let's assume it is a queue.

isTopic = false;

}

}

catch (Exception e) {

System.out.println(e.getMessage());

printUsage();

System.exit(-1);

}

return;

}

/**

* Display usage help.

*/

private static void printUsage() {

System.out.println("

Usage:");

System.out

.println("JmsConsumer -m queueManagerName -d destinationName [-h host -p port -l channel]");

return;

}

} // end class

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值