WebSphere MQ发送接收消息_二

本文介绍了一个使用Java实现的IBM WebSphere MQ消息发送与接收的例子。通过具体代码展示了如何配置队列管理器、创建连接及会话,并实现消息的发送与接收功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebSphere MQ安装配置,队列管理器,队列,通道配置请见:

http://blog.youkuaiyun.com/adam_wzs/article/details/52381599


package com.wangzs.mq;

import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.log4j.Logger;
import util.WSMqConfigure;
import com.ibm.mq.jms.MQQueueConnectionFactory;

/**
 * @Title IBM WebSphere MQ 发送消息
 * @Description
 * @author wangzs
 * @date 2016-9-1
 */
public class WSMQSender {
	private static Logger logger = Logger.getLogger(WSMQSender.class);
	private static MQQueueConnectionFactory mcf;
	private static QueueConnection qconn;
	private static QueueSession session;
	private static Queue queue;
	private static QueueSender sender;
	/**
	 * 初始化
	 */
	static {
		try {
			mcf = new MQQueueConnectionFactory();
			mcf.setHostName(WSMqConfigure.getStringWSMqProp("hostname"));// MQ服务器的IP地址
			mcf.setPort(WSMqConfigure.getInWSMqtProp("port"));// MQ端口
			mcf.setQueueManager(WSMqConfigure.getStringWSMqProp("queuemanager_name"));// MQ的队列管理器名称;
			mcf.setChannel(WSMqConfigure.getStringWSMqProp("channel"));// // MQ通道名字
			qconn = mcf.createQueueConnection();
			qconn.start();
			session = qconn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
			queue = session.createQueue(WSMqConfigure.getStringWSMqProp("queue_name_recv"));// MQ远程队列的名称
			sender = session.createSender(queue);
			logger.info("WSMQSender initialize success.");
		} catch (JMSException e) {
			e.printStackTrace();
			logger.info("WSMQSender initialize fail." + e.getStackTrace());
		}
	}

	/**
	 * 发消息
	 * 
	 * @param msgInfo
	 */
	public void sendMessage(String msgInfo) {
		try {
			TextMessage msg = session.createTextMessage();
			msg.setText(msgInfo);
			sender.send(msg);
			logger.info("send message:" + msgInfo);
		} catch (JMSException e) {
			e.printStackTrace();
			logger.info("send message error." + e.getStackTrace());
		}
	}

	/**
	 * 停止
	 */
	public void stop() {
		try {
			sender.close();
			session.close();
			qconn.stop();
			qconn.close();
			logger.info("WSMQSender stop success.");
		} catch (JMSException e) {
			e.printStackTrace();
			logger.info("WSMQSender stop error." + e.getStackTrace());
		}
	}
}


package com.wangzs.mq;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.log4j.Logger;
import util.WSMqConfigure;
import com.ibm.mq.jms.MQQueueConnectionFactory;

/**
 * IBM WebSphere MQ 接收消息
 * 
 * @Title
 * @Description
 * @author wangzs
 * @date 2016-9-1
 */
public class WSMQRecevicer implements MessageListener {
	private static Logger logger = Logger.getLogger(WSMQRecevicer.class);
	private static MQQueueConnectionFactory mcf;
	private static QueueConnection qconn;
	private static QueueSession session;
	private static Queue queue;
	private static QueueReceiver recevier;
	boolean replyed = false;
	/**
	 * 初始化
	 */
	static {
		try {
			mcf = new MQQueueConnectionFactory();
			mcf.setHostName(WSMqConfigure.getStringWSMqProp("hostname"));// MQ服务器的IP地址
			mcf.setPort(WSMqConfigure.getInWSMqtProp("port"));// MQ端口
			mcf.setQueueManager(WSMqConfigure.getStringWSMqProp("queuemanager_name"));// MQ的队列管理器名称;
			mcf.setChannel(WSMqConfigure.getStringWSMqProp("channel"));// MQ通道名字
			qconn = mcf.createQueueConnection();
			qconn.start();
			session = qconn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
			queue = session.createQueue(WSMqConfigure.getStringWSMqProp("queue_name_recv"));// MQ远程队列的名称
			recevier = session.createReceiver(queue);
			logger.info("WSMQRecevicer initialize success.");
		} catch (JMSException e) {
			e.printStackTrace();
			logger.info("WSMQRecevicer initialize fail." + e.getStackTrace());
		}
	}

	/**
	 * 停止
	 */
	public void stop() {
		try {
			recevier.close();
			session.close();
			qconn.stop();
			qconn.close();
			logger.info("WSMQRecevicer stop success.");
		} catch (JMSException e) {
			e.printStackTrace();
			logger.info("WSMQRecevicer stop error." + e.getStackTrace());
		}
	}

	/**
	 * 接收消息
	 */
	public void recevicerMessage() {
		try {
			session = qconn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
			recevier = session.createReceiver(queue);
			recevier.setMessageListener(this);
			while (!replyed) {
				Thread.sleep(1000);
			}
		} catch (JMSException e) {
			e.printStackTrace();
			logger.info("recevicer message error." + e.getStackTrace());
		} catch (InterruptedException e) {
			e.printStackTrace();
			logger.info("recevicer message error." + e.getStackTrace());
		}
	}

	public void onMessage(Message message) {
		try {
			String textMessage = ((TextMessage) message).getText();
			logger.info("recevicer message:" + textMessage);
		} catch (JMSException e) {
			e.printStackTrace();
			logger.info("recevicer listener message error:" + e.getStackTrace());
		} finally {
			replyed = true;
		}
	}
}


package util;

import java.io.InputStream;
import java.util.Properties;

import org.apache.log4j.Logger;

/**
 * @Title 解析wsmq.properties
 * @Description
 * @author wangzs
 * @date 2016-9-1
 */
public class WSMqConfigure {
	private static Logger logger = Logger.getLogger(WSMqConfigure.class);

	private static Properties properties;
	private static String prefix = "com.ceair.wsmq.";

	static {
		properties = new Properties();
		InputStream in = WSMqConfigure.class.getClassLoader().getResourceAsStream("wsmq.properties");
		try {
			properties.load(in);
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("load wsmq.properties error:" + e.getStackTrace());
		}
	}

	/**
	 * 得到string类型参数值
	 * 
	 * @param propName
	 * @return
	 */
	public static String getStringWSMqProp(String propName) {
		return properties.getProperty(prefix + propName);
	}

	/**
	 * 得到int类型参数值
	 * 
	 * @param propName
	 * @return
	 */
	public static int getInWSMqtProp(String propName) {
		return Integer.parseInt(properties.getProperty(prefix + propName));
	}

	public static void main(String[] args) {
		System.err.println(WSMqConfigure.getStringWSMqProp("queuemanager_name"));
		System.err.println(WSMqConfigure.getInWSMqtProp("port"));
	}
}


wsmq.properties

#ibm websphere mq config

#local config
com.ceair.wsmq.hostname = 127.0.0.1
com.ceair.wsmq.port = 1414
com.ceair.wsmq.queuemanager_name = QM_JACK
com.ceair.wsmq.queue_name_recv =QUEUE_RECV
com.ceair.wsmq.channel=CNN_WANGZS



package com.wangzs.mq;

import org.apache.log4j.Logger;
import org.junit.Test;

/**
 * @Title 测试IBM WebSphere MQ收发消息
 * @Description 测试类 WSMQRecevicer.java / WSMQSender.java
 * @author wangzs
 * @date 2016-9-1
 */
public class TestWSMq {
	private static Logger logger = Logger.getLogger(TestWSMq.class);

	@Test
	public void testWSMQSender() {
		WSMQSender ms = new WSMQSender();
		for (int i = 0; i < 10; i++) {
			ms.sendMessage(i + " wangzs ni hao!");
		}
		logger.info("send message success.");
		ms.stop();
	}

	@Test
	public void testWSMQRecevicer() {
		WSMQRecevicer mr = new WSMQRecevicer();
		logger.info("Receiving message...");
		mr.recevicerMessage();
		logger.info("Receiving message over.");
		mr.stop();
	}
}

运行结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值