loadrunner使用java 实现MQ协议发收脚本

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
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值