Skip to content

Instantly share code, notes, and snippets.

@ZhouMeichen
Created March 1, 2015 06:35
Show Gist options
  • Save ZhouMeichen/e7931565cdb1b44b49a6 to your computer and use it in GitHub Desktop.
Save ZhouMeichen/e7931565cdb1b44b49a6 to your computer and use it in GitHub Desktop.
调用WebSphere MQ接口实现消息的读取,利用JMeter的Java请求进行性能测试
package test;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
public class JMeterJavaSampler implements JavaSamplerClient{
private SampleResult sr;
// private String[] getMsg;
//
// private String[] sendMsg;
//
// private String msgPath;
public void setupTest(JavaSamplerContext arg0){
sr = new SampleResult();
}
public Arguments getDefaultParameters(){
Arguments args = new Arguments();
// args.addArgument("GetMsg_HostName", "");
// args.addArgument("GetMsg_Port", "");
// args.addArgument("GetMsg_qManager", "");
// args.addArgument("GetMsg_QName", "");
// args.addArgument("GetMsg_Channel", "");
// args.addArgument("GetMsg_CCSID", "");
//
// args.addArgument("SendMsg_HostName", "");
// args.addArgument("SendMsg_Port", "");
// args.addArgument("SendMsg_qManager", "");
// args.addArgument("SendMsg_QName", "");
// args.addArgument("SendMsg_Channel", "");
// args.addArgument("SendMsg_CCSID", "");
//
// args.addArgument("msgPath","");
return args;
}
public SampleResult runTest(JavaSamplerContext arg0) {
// getMsg[0] = arg0.getParameter("GetMsg_HostName");
// getMsg[1] = arg0.getParameter("GetMsg_Port");
// getMsg[2] = arg0.getParameter("GetMsg_qManager");
// getMsg[3] = arg0.getParameter("GetMsg_QName");
// getMsg[4] = arg0.getParameter("GetMsg_Channel");
// getMsg[5] = arg0.getParameter("GetMsg_CCSID");
//
// sendMsg[0] = arg0.getParameter("SendMsg_HostName");
// sendMsg[1] = arg0.getParameter("SendMsg_Port");
// sendMsg[2] = arg0.getParameter("SendMsg_qManager");
// sendMsg[3] = arg0.getParameter("SendMsg_QName");
// sendMsg[4] = arg0.getParameter("SendMsg_Channel");
// sendMsg[5] = arg0.getParameter("SendMsg_CCSID");
//
// msgPath = arg0.getParameter("msgPath");
// getMsg[0] = "172.29.140.157";
// getMsg[1] = "1415";
// getMsg[2] = "EBanking";
// getMsg[3] = "ESB_TEST_QUEUE";
// getMsg[4] = "SYSTEM.CHANNEL";
// getMsg[5] = "1381";
//
// sendMsg[0] = "172.29.140.157";
// sendMsg[1] = "1415";
// sendMsg[2] = "EBanking";
// sendMsg[3] = "ESB_TEST_QUEUE";
// sendMsg[4] = "SYSTEM.CHANNEL";
// sendMsg[5] = "1381";
//
// msgPath = "D://BOC.xml";
try {
MQTest mqst = new MQTest();
mqst.init();
StringBuffer sb= new StringBuffer("");
FileReader reader = null;
reader = new FileReader("D:/BOC.xml");
BufferedReader br = new BufferedReader(reader);
String str = null;
try {
while((str = br.readLine()) != null) {
sb.append(str);
}
System.out.println(sb);
br.close();
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String s = sb.toString();
mqst.SendMsg(s.getBytes("GBK"));
sr.sampleStart(); // JMeter 开始统计响应时间标记
// mqst.GetMsg();
while(true)
{
if (mqst.GetMsg()){
break;
}
}
sr.setSuccessful(true);
mqst.finalizer();
}
catch (Exception e) {
e.printStackTrace();
sr.setSuccessful(false);
}
finally {
sr.sampleEnd(); // JMeter 结束统计响应时间标记
}
return sr;
}
public void teardownTest(JavaSamplerContext arg0){
}
// public static void main(String[] args) {
// Arguments params = new Arguments();
// params.addArgument("GetMsg_HostName", "172.29.140.157");
// params.addArgument("GetMsg_Port", "1415");
// params.addArgument("GetMsg_qManager", "EBanking");
// params.addArgument("GetMsg_QName", "EARESPONSEH2H");
// params.addArgument("GetMsg_Channel", "SYSTEM.CHANNEL");
// params.addArgument("GetMsg_CCSID", "1381");
//
// params.addArgument("SendMsg_HostName", "ESB_TEST_QUEUE");
// params.addArgument("SendMsg_Port", "1415");
// params.addArgument("SendMsg_qManager", "EBanking");
// params.addArgument("SendMsg_QName", "");
// params.addArgument("SendMsg_Channel", "SYSTEM.CHANNEL");
// params.addArgument("SendMsg_CCSID", "1381");
//
// params.addArgument("msgPath","D://BOC.xml");
// JavaSamplerContext arg0 = new JavaSamplerContext(params);
// JMeterJavaSampler javasampler = new JMeterJavaSampler();
// javasampler.setupTest(arg0);
// javasampler.runTest(arg0);
// javasampler.teardownTest(arg0);
//
// }
}
package test;
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.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
/*
* 可以在MQ的资源管理器的某一个队列上放入测试消息、浏览消息等
* 可以放入多条消息,按先进先出的方式取得
*/
public class MQTest {
private String qManager;// QueueManager名
private MQQueueManager qMgr;
private MQQueue qQueue;
String HOST_NAME;
int PORT = 0;
String Q_NAME;
String CHANNEL; //通道
int CCSID; //编码
String Msg; //消息
public void init() {
}
void finalizer() {
try {
qQueue.close();
qMgr.disconnect();
} catch (MQException e) {
System.out
.println("A WebSphere MQ error occurred : Completion code "
+ e.completionCode + " Reason Code is "
+ e.reasonCode);
}
}
/*
* 取过一次,下次就没有了
*/
public boolean GetMsg() {
try {
HOST_NAME = "172.29.140.157";
// int p = Integer.parseInt(args[1]);
PORT = 1416;
qManager = "YUM_ESB";
Q_NAME = "H2H_EA_SpecialSalary";
CHANNEL = "SYSTEM.CHANNEL";
// int c = Integer.parseInt(args[5]);
CCSID = 1381; // 表示是简体中文,
// CCSID的值在AIX上一般设为1383,如果要支持GBK则设为1386,在WIN上设为1381。
MQEnvironment.hostname = HOST_NAME;
MQEnvironment.port = PORT;
MQEnvironment.channel = CHANNEL;
MQEnvironment.CCSID = CCSID;
qMgr = new MQQueueManager(qManager);
int qOptioin = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE
| MQC.MQOO_OUTPUT;
qQueue = qMgr.accessQueue(Q_NAME, qOptioin);
} catch (MQException e) {
System.out
.println("A WebSphere MQ error occurred : Completion code "
+ e.completionCode + " Reason Code is "
+ e.reasonCode);
}
try {
MQMessage retrievedMessage = new MQMessage();
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options += MQC.MQPMO_SYNCPOINT;
qQueue.get(retrievedMessage, gmo);
int length = retrievedMessage.getDataLength();
byte[] msg = new byte[length];
retrievedMessage.readFully(msg);
String sMsg = new String(msg);
System.out.println("The message is read!");
System.out.println(sMsg);
return true;
} catch (RuntimeException e) {
e.printStackTrace();
return false;
} catch (MQException e) {
if (e.reasonCode != 2033) // 没有消息
{
e.printStackTrace();
System.out
.println("A WebSphere MQ error occurred : Completion code "
+ e.completionCode
+ " Reason Code is "
+ e.reasonCode);
}
return false;
} catch (java.io.IOException e) {
System.out
.println("An error occurred whilst to the message buffer "
+ e);
return false;
}
}
public void SendMsg(byte[] qByte) {
try {
HOST_NAME = "172.29.140.157";
// int p = Integer.parseInt(args[1]);
PORT = 1416; //1416;
qManager = "YUM_ESB";
Q_NAME = "EA_H2H_SpecialSalary";
CHANNEL = "SYSTEM.CHANNEL";
// int c = Integer.parseInt(args[5]);
CCSID = 1381; // 表示是简体中文,
// CCSID的值在AIX上一般设为1383,如果要支持GBK则设为1386,在WIN上设为1381。
MQEnvironment.hostname = HOST_NAME;
MQEnvironment.port = PORT;
MQEnvironment.channel = CHANNEL;
MQEnvironment.CCSID = CCSID;
qMgr = new MQQueueManager(qManager);
int qOptioin = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE
| MQC.MQOO_OUTPUT;
qQueue = qMgr.accessQueue(Q_NAME, qOptioin);
} catch (MQException e) {
System.out
.println("A WebSphere MQ error occurred : Completion code "
+ e.completionCode + " Reason Code is "
+ e.reasonCode);
}
try {
MQMessage qMsg = new MQMessage();
qMsg.write(qByte);
MQPutMessageOptions pmo = new MQPutMessageOptions();
qQueue.put(qMsg, pmo);
System.out.println("The message is sent!");
System.out.println("\tThe message is " + new String(qByte, "GBK"));
} catch (MQException e) {
System.out
.println("A WebSphere MQ error occurred : Completion code "
+ e.completionCode + " Reason Code is "
+ e.reasonCode);
} catch (java.io.IOException e) {
System.out
.println("An error occurred whilst to the message buffer "
+ e);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment