我想使用 Jmeter 向远程 IBM MQ 发送消息以进行性能测试。我通过了这个链接。但它需要 JNDI 特定的详细信息,例如 QueueConnection Factory、JNDI 名称请求队列、初始上下文工厂和提供程序 URL。而我拥有的队列详细信息是此链接中共享的代码中给出的 Qmanager、Qname、主机名、通道、端口。这些属性有什么关系吗?我可以使用我拥有的队列详细信息配置 Jmeter JMS 测试吗?
提前致谢。
我想使用 Jmeter 向远程 IBM MQ 发送消息以进行性能测试。我通过了这个链接。但它需要 JNDI 特定的详细信息,例如 QueueConnection Factory、JNDI 名称请求队列、初始上下文工厂和提供程序 URL。而我拥有的队列详细信息是此链接中共享的代码中给出的 Qmanager、Qname、主机名、通道、端口。这些属性有什么关系吗?我可以使用我拥有的队列详细信息配置 Jmeter JMS 测试吗?
提前致谢。
您提供的第一个链接使用 Java JMS/MQ 进行了描述,第二个链接显示了 Java MQ(非 JMS)。
JMS 只是一个抽象层。简单来说,JMS 就像给所有东西起一个昵称。QCF (QueueConnectionFactory) 只是一个对象,它具有连接到队列管理器的所有信息。
IE
DEFINE QCF(myQCF) QMANAGER(MQWT1) CHANNEL(TEST.CHL) HOSTNAME(127.0.0.1) PORT(1415) TRANSPORT(CLIENT) FAILIFQUIESCE(YES)
JMS 队列只是 MQ 队列的昵称。
DEFINE Q(test.q) QUEUE(TEST.Q1) QMANAGER(MQWT1) TARGCLIENT(JMS) FAILIFQUIESCE(YES)
因此,在您的 JMS 代码中,您只需引用您的 QCF(即 myQCF)和 JMS 队列(即 test.q)就可以了。
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
env.put(Context.PROVIDER_URL, ""file:/C:/JNDI-Directory");
try
{
Context ctx = new InitialContext(env);
QueueConnectionFactory cf = (QueueConnectionFactory) ctx.lookup("myQCF");
Queue q = (Queue) ctx.lookup("test.q");
}
catch (NamingException e)
{
System.err.println(e.getLocalizedMessage());
e.printStackTrace();
}
它也可以通过 beanshell 来完成。您可以通过 api 直接访问队列管理器,也可以通过 jms 绑定公开队列。第一种更简单,不需要安装 MQ 客户端。