文档章节

MQ测试JAVA客户端实现源码

JavaOlder
 JavaOlder
发布于 2013/03/20 17:33
字数 658
阅读 3790
收藏 9
客户端实现
JAVA客户端源码
/**
 * TestFotMQ.java
 */

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.MQQueue;
import com.ibm.mq.MQQueueManager;

/**
 * 函数功能: MQjava客户端实现
 * 开发人员:@author Zeming_gao 
 * 开发时间:2013-3-21 
 * 修改记录:
 */

public class MQClient {

    /**
     * Logger for this class
     */
    private static final Log logger = LogFactory.getLog(MQClient.class);
    private String strExtraSendXmlFileName = "D:\\jndi.properties";
    private static Properties props;

    static {
	props = new Properties();
	props.put("mqHostName", "139.31.89.67");
	props.put("mqPort", "4032");
	props.put("mqCCSID", "1381");
	props.put("mqUserName", "liujx");
	props.put("mqPassword", "linux");
	props.put("mqQManager", "Monitor_Queue_Manager");
	props.put("mqChannel", "Monitor_Conn_Chanel");
	props.put("mqLocalOutQueue", "Q_RECEIVE");
	props.put("mqLocalInQueue", "Q_RECEIVE");

    }

    /**
     * 
     * 函数功能:TODO 主测试方法 <br>
     * 开发人员:@author Zeming_gao <br>
     * 开发时间:2013-3-21 <br>
     * 相关参数: <br>
     * 
     * @param args
     *            修改记录: <br>
     */

    public static void main(String[] args) {

	MQClient test = new MQClient();
	// 发送消息
	test.putMsg();
	// 接收消息
	test.getMsg();
    }

    public void putMsg() {
	// MQ发送数据
	try {
	    // 建立MQ客户端应用上下文环境
	    MQEnvironment.hostname = props.getProperty("mqHostName");
	    MQEnvironment.port = Integer.parseInt(props.getProperty("mqPort"));
	    MQEnvironment.CCSID = Integer
		    .parseInt(props.getProperty("mqCCSID"));
	    MQEnvironment.channel = props.getProperty("mqChannel");
	    MQEnvironment.userID = props.getProperty("mqUserName");
	    MQEnvironment.password = props.getProperty("mqPassword");
	    // 连接队列管理器
	    MQQueueManager qMgr = new MQQueueManager(
		    props.getProperty("mqQManager"));
	    int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;
	    // 打开队列
	    MQQueue q = null;
	    try {
		q = qMgr.accessQueue(props.getProperty("mqLocalOutQueue"),
			openOptions);
	    } catch (MQException me) {
		System.out.println("打开队列出现通讯异常" + me.getMessage() + "\n");
		return;
	    }
	    InputStream fins = new FileInputStream(new File(
		    strExtraSendXmlFileName));
	    byte[] data = new byte[fins.available()];
	    fins.read(data);
	    fins.close();
	    MQMessage msg = new MQMessage();
	    msg.write(data);
	    // 放入消息
	    q.put(msg);
	    System.out.println("客户端发送数据包成功..");
	    // 关闭队列
	    q.close();
	    // 断开队列管理器连接
	    qMgr.disconnect();
	} catch (MQException e) {
	    if (logger.isDebugEnabled())
		logger.debug(e.getMessage());
	    e.printStackTrace();
	} catch (Exception e) {
	    if (logger.isDebugEnabled())
		logger.debug(e.getMessage());
	    e.printStackTrace();
	}
    }

    /**
     * 
     * 函数功能:TODO 获取数据 <br>
     * 开发人员:@author Zeming_gao <br>
     * 开发时间:2013-3-21 <br>
     * 相关参数: <br>
     * 修改记录: <br>
     */
    public void getMsg() {
	// MQ接收数据
	try {
	    // 建立用上下文环境
	    MQEnvironment.hostname = props.getProperty("mqHostName");
	    MQEnvironment.port = Integer.parseInt(props.getProperty("mqPort"));
	    MQEnvironment.CCSID = Integer
		    .parseInt(props.getProperty("mqCCSID"));
	    MQEnvironment.channel = props.getProperty("mqChannel");
	    MQEnvironment.userID = props.getProperty("mqUserName");
	    MQEnvironment.password = props.getProperty("mqPassword");
	    // 建立队列管理器
	    MQQueueManager qMgr = new MQQueueManager(
		    props.getProperty("mqQManager"));
	    int openOptions = MQC.MQOO_INPUT_AS_Q_DEF
		    | MQC.MQOO_FAIL_IF_QUIESCING;
	    // 打开队列
	    MQQueue q = qMgr.accessQueue(props.getProperty("mqLocalInQueue"),
		    openOptions);
	    MQGetMessageOptions mgo = new MQGetMessageOptions();
	    mgo.options |= MQC.MQGMO_NO_WAIT;
	    // 构造返回消息
	    MQMessage msg = new MQMessage();
	    if ((msg = fetchOneMsg(q)) != null) {
		byte[] xmlData = new byte[msg.getDataLength()];
		msg.readFully(xmlData);
		logger.info(new String(xmlData));
		System.out.println("接收服务器端返回数据包成功..\n接收数据为:\n"
			+ new String(xmlData));
	    }
	    // 关闭队列
	    q.close();
	    // 断开队列管理器
	    qMgr.disconnect();
	} catch (MQException e) {
	    logger.error(e);
	    e.printStackTrace();
	} catch (Exception e) {
	    logger.error(e);
	    e.printStackTrace();
	}
    }

    /**
     * 
     * 函数功能:TODO 从队列中取出消息 <br>
     * 开发人员:@author Zeming_gao <br>
     * 开发时间:2013-3-21 <br>
     * 相关参数: <br>
     * 
     * @param q
     * @return
     * @throws Exception
     *             修改记录: <br>
     */
    private static MQMessage fetchOneMsg(MQQueue q) throws Exception {
	MQGetMessageOptions mgo = new MQGetMessageOptions();
	mgo.options |= MQC.MQGMO_NO_WAIT;
	MQMessage msg = new MQMessage();
	try {
	    // 获取消息
	    q.get(msg, mgo);
	} catch (MQException e) {
	    return null;
	}
	return msg;
    }
}
 
 
发送文件内容:name = JACKage = 23sex = male
执行结果,控制台输出如下:
客户端发送数据包成功..接收服务器端返回数据包成功..
接收数据为:name = JACKage = 23sex = male
 

© 著作权归作者所有

JavaOlder
粉丝 82
博文 55
码字总数 39398
作品 0
广州
产品经理
私信 提问
阿里云物联网平台设备端开发样例

1. 创建产品 2. 添加设备 3. 创建规则 4. 编写SQL 5. 消息队列MQ:创建Topic 6. 规则引擎-添加操作 7. 启动规则引擎 8. 运行MQTT客户端 [1] 访问地址:阿里云物联网平台 > 设备端开发指南 > ...

shoen
2018/08/24
0
0
25岁小伙分享高质量Java面试题,这些你能答得上来吗(读者福利)

前言 前段时间经常看到推送某某某面试哪家成功,某某某面试哪家失败,这都是稀松平常的事情,那么为什么有的人面试经常受挫,有的人面试一帆风顺。其中缘由众说纷纭,相信大家也经历和很多面...

我最喜欢三大框架
06/14
0
0
2019年阿里Java面试必问:JVM与性能优化+Redis+设计模式+分布式

前言 一年之计在于春 金三银四已经要到来,2019的新的开始,作为一个开发人员,你是否面上了自己理想的公司,薪资达到心中理想的高度? 面试:如果不准备充分的面试,完全是浪费时间,更是对...

java知识分子
02/18
0
0
JVM Attach实现原理剖析

前言 本文旨在从理论上分析JVM 在 Linux 环境下 Attach 操作的前因后果,以及 JVM 为此而设计并实现的解决方案,通过本文,我希望能够讲述清楚如下三个主要方面的内容。 原发布:我的博客 一...

从精于一开始
2018/07/21
0
0
Java开发:错过金三银四 你还要错过金九银十吗?面试大纲总结

前言: 一年之计在于春 金三银四已过,2018也已经年过一半多,作为一个开发人员,你是否面上了自己理想的公司,薪资达到心中理想的高度? 面试:如果不准备充分的面试,完全是浪费时间,更是...

Java大蜗牛
2018/08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Chrome OS 更新新版本可让Linux访问USB连接的Android设备

谷歌再次为Chrome OS带来了重大版本更新,使版本号达到了75。本次更新的一大亮点就是允许在Chrome OS上运行的Linux能够识别通过USB方式连接的Android设备,能够让用户使用Linux进行调试等等。...

linuxCool
昨天
10
0
聊聊feign的HystrixInvocationHandler

序 本文主要研究一下feign的HystrixInvocationHandler HystrixInvocationHandler feign-hystrix-10.2.3-sources.jar!/feign/hystrix/HystrixInvocationHandler.java final class HystrixInvo......

go4it
昨天
15
0
WPS 开启宏功能

前言 最近安装了个人版的WPS2019,使用Excel的宏功能时候发现不能使用了,网上下载了几个安装包都是比较旧的,不能使用。 找了个VB7.1的安装包,安装完了,重启WPS宏功能就可以使用了。 安装...

sharelocked
昨天
4
0
ZStack实践汇 | 高效开发测试打造产品化私有云

作者:许佳珺 前言 随着越来越多的企业将云计算产品应用到基础设施及其核心业务中,如何提高和保证软件交付质量、减少软件开发迭代周期、加速软件发布频率成为所有云厂商面临的关键问题。 根...

ZStack社区版
昨天
3
0
IPv4如何转换为IPv6?

导读 ipv6已经逐渐在应用,现在已经有很多的运营商支持ipv6,前天我们也发布了如何让电脑使用ipv6地址?有很多朋友在问?ipv6有什么作用,它的表示方式是什么,今天我们来一起来详细了解下ipv...

问题终结者
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部