loadrunner使用java 实现MQ协议发收脚本
/*************************************************
脚本编写信息描述:
项目名称:JAVA操作MQ消息队列示例
脚本功能:发送、获取消息
编码语言:JAVA
**************************************************/
import java.io.EOFException;
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.MQPoolToken;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
import lrapi.lr;
public class Actions
{
privateMQQueuemqQueue;
privateMQQueueManagerqMgr = null;
private String hostName = "196.188.190.20"; //远程MQ主机IP
private String channel = "TEST.SVRCONN"; //远程MQ服务器连接通道
private String qManager = "TQM_test"; //远程队列管理器名称
private String sendQName = "test.REQ" ; //用于发送消息的远程队列
private String recvQName = "test.RES";//用于接收消息的本地队列
privateintqmPort = 1414;
privateintqmCCSID = 1208;
public String getMsg() { //获得消息
byte[] data = null;
MQException.log = null;
try {
//创建队列管理的连接
//设置队列选项
intopenOptions = MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING;//MQC.MQOO_INPUT_AS_Q_DEF;
//指定要打开的队列
mqQueue = this.qMgr.accessQueue(this.recvQName, openOptions);
//设置取消息时的消息选项
MQGetMessageOptionsgmo = new MQGetMessageOptions();
gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;
gmo.options = gmo.options + MQC.MQGMO_WAIT;
gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;
gmo.waitInterval = 30000;
//创建一个的消息
MQMessageinMsg = new MQMessage();
//从队列中取关联消息ID的消息
inMsg.correlationId = lr.eval_string("<P_vuid><P_realdate>").getBytes();
mqQueue.get(inMsg, gmo);
//从消息中读取数据并输出
data = new byte[inMsg.getMessageLength()];
inMsg.readFully(data,0,inMsg.getMessageLength());
//提交队列管理的连接
qMgr.commit();
//移除连接池中的连接
//MQEnvironment.removeConnectionPoolToken(token);
} catch (EOFException e) {
e.printStackTrace();
} catch (MQException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (mqQueue != null) {
mqQueue.close();
}
} catch (MQException ex) {
System.err.print(ex);
}
}
//lr.output_message(new String(EBCDICToASCII(data)));
return new String(CoderUtil.EBCDICToASCII(data));
}
public void putMsg(String message) {//发送消息
MQException.log = null;
try {
//设置队列选项
intopenOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;
//指定要打开的队列
mqQueue = this.qMgr.accessQueue(this.sendQName, openOptions);
//设置放消息时的消息选项
MQPutMessageOptions mpmo = new MQPutMessageOptions();
//创建新的消息
MQMessage mqMessage = new MQMessage();
//设置消息id变量,用于消息关联
mqMessage.messageId = lr.eval_string("<P_vuid><P_realdate>").getBytes();
//将数据放入消息缓冲区
mqMessage.writeString(CoderUtil.ASCIIToEBCDIC(message));
//把消息写到指定的队列中
mqQueue.put(mqMessage, mpmo);
//提交队列管理的连接
this.qMgr.commit();
} catch (MQException ex) {
System.out.println("Error Code : " + ex.reasonCode);
ex.printStackTrace();
} catch (java.io.IOException ex) {
ex.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (mqQueue != null) {
mqQueue.close();
}
} catch (MQException ex) {
System.err.print(ex);
}
}
}
public int init() throws Throwable {
//设置MQ环境变量
MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSPORT_MQSERIES);
MQEnvironment.CCSID = this.qmCCSID; //设置CCSID
MQEnvironment.hostname = this.hostName; //
MQEnvironment.channel = this.channel;
MQEnvironment.port = this.qmPort;
this.qMgr=new MQQueueManager(this.qManager); //建立MQ连接
return 0;
}//end of init
public int action() throws Throwable {
String result = "error";
try {
String srcStr = "<P_bnkno>";
lr.start_transaction("test");
putMsg(lr.eval_string(srcStr));
//lr.output_message(ASCIIToEBCDIC(srcStr));
//lr.output_message(getMsg());
result = getMsg();
//lr.output_message(lr.eval_string(result.substring(241,245)));
if(result.substring(241,245).equals("0000")){
lr.end_transaction("test",lr.PASS);
} else {
lr.end_transaction("test",lr.FAIL);
//lr.output_message("发送字符串:"+lr.eval_string(srcStr));
//lr.output_message("返回字符串:"+lr.eval_string(result));
lr.error_message(“错误码是:"+result.substring(241,245));
//String outStr = new String(result.getBytes("UTF-8"),"ASCII");
// putMsg(outStr);
// String result2 = new String(srcStr.getBytes("ASCII","UTF-8"));
//lr.output_message("返回字符串:"+outStr);
}
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}//end of action
publicint end() throws Throwable {
if (this.qMgr != null) {
this.qMgr.close();
this.qMgr.disconnect();
}
return 0;
}//end of end
}