我正在尝试使用 Jmeter 的 JMS Publisher 将消息发布到 IBM MQ 队列,但是当我运行测试时,JMS Publisher 失败并返回以下错误。
IBM MQ 9.3.2.0
这是我用来定义 ConnectionFactory 的发布者配置和 .bindings 文件。
ConnectionFactory/ClassName=javax.jms.ConnectionFactory
ConnectionFactory/FactoryName=com.ibm.mq.jms.MQConnectionFactoryFactory
ConnectionFactory/RefAddr/0/Content=QM1
ConnectionFactory/RefAddr/0/Type=queueManager
ConnectionFactory/RefAddr/1/Content=127.0.0.1
ConnectionFactory/RefAddr/1/Type=host
ConnectionFactory/RefAddr/2/Content=1414
ConnectionFactory/RefAddr/2/Type=port
ConnectionFactory/RefAddr/3/Content=DEV.APP.SVRCONN
ConnectionFactory/RefAddr/3/Type=channel
ConnectionFactory/RefAddr/4/Content=SYSTEM.ADMIN.SVRCONN
ConnectionFactory/RefAddr/4/Type=transportType
MyTestQueue/ClassName=com.ibm.mq.jms.MQQueue
MyTestQueue/FactoryName=com.ibm.mq.jms.MQQueueFactory
MyTestQueue/RefAddr/0/Content=DEV.QUEUE.1
MyTestQueue/RefAddr/0/Type=name
MyTestQueue/RefAddr/1/Content=queue:///DEV.QUEUE.1
MyTestQueue/RefAddr/1/Type=address
根据JMeter文档:
JMeter 包括 JMS API jar,但不包括 JMS 客户端实现。如果你想运行 JMS 测试,你需要从 JMS 供应商处下载合适的 jar 。
有关安装其他 jar 的详细信息,请参阅 JMeter Classpath 部分。
因此,您需要在 JMeter 安装的“lib”文件夹中安装适当版本的 com.ibm.mq.allclient 库。
连接工厂应该是
com.ibm.msg.client.jms.JmsConnectionFactory
您没有描述如何创建 .bindings 文件,显然不是使用 JMSAdmin。 在您选择的配置目录中创建两个文件:
INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
PROVIDER_URL=file:///C:/Users/Stage/Downloads/JNDI-Directory
SECURITY_AUTHENTICATION=none
def qcf(ConnectionFactory) qmanager(QM1) transport(client) channel(DEV.APP.SVRCONN) hostname(127.0.0.1) port(1414)
def q(MyTestQueue) queue(DEV.QUEUE.1)
end
因为您的队列管理器在 JMeter 本地,您也可以使用本地绑定(无网络)并像这样定义 qcf:
def qcf(ConnectionFactory) qmanager(QM1)
所有参数都在“JMS 对象的 IBM MQ 类的属性”一章中的 MQ 文档中进行了描述。
删除目标 jndi 目录中的 .bindings 文件,然后执行:
"<mq-install-dir>\java\bin\JMSAdmin" < whatever.scp
喜欢
"C:\Program Files\IBM\MQ\java\bin\JMSAdmin" < whatever.scp
您将在配置文件中指定的目录中找到 .bindings。 对于后续调用,要么删除之前的 .bindings,要么使用 alter 命令而不是在 scp 文件中定义。