文档章节

MQ测试JAVA客户端实现源码

JavaOlder
 JavaOlder
发布于 2013/03/20 17:33
字数 658
阅读 3788
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

最开始学习素描的步骤是什么?

最开始学习素描的步骤是什么?很多学画画的朋友们都会问直接跳过素描不学素描行不行,小编非常的肯定告诉你不行,素描是所以绘画类的基础,台阶是一层一层筑起的,目前的现实是未来理想的基础...

设绘嗨
30分钟前
1
0
Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray

code val linkPairSum = F.udf( (list:List[Map[Long,Int]]) => { var map = Map[Long,Int]() for(m <- list){ if(m != null){ ......

张欢19933
30分钟前
1
0
git常见问题

一、clone代码 clone 1.登录账号密码不对 fatal: Authentication failed for 2.权限不足 Permission denied (publickey) 或者emote: User permission denied fatal: unable to access u......

hexiaoming123
40分钟前
1
0
Mybatis操作mysql 8的Json字段类型

Json字段是从mysql 5.7起加进来的全新的字段类型,现在我们看看在什么情况下使用该字段类型,以及用mybatis如何操作该字段类型 一般来说,在不知道字段的具体数量的时候,使用该字段是非常合...

算法之名
48分钟前
38
0
Windows7至Windows10的升级建议

目前,诸多企业或已开始在进行Windows7至Windows10的升级,或正在规划Windows7升级至Windows10。 主要原因有两个: Windows7的生命周期即将结束,这意味着再也无法获取Windows7的安全更新,以...

嘉为科技
51分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部