JMeter JMS Publisher 尝试发布到 activemq artemis 队列时出错:java.lang.NoSuchMethodError: javax.jms.Message.setJMSDeliveryTime(J)V

问题描述 投票:0回答:1

在具有 java 版本“11.0.21”2023-10-17 LTS、Java(TM) SE 运行时环境 18.9(内部版本 11.0.21+9-LTS-193)的 Windows 10 计算机上,我下载了最新版本的JMeter (apache-jmeter-5.6.3).

我有一个带有 JMS Publisher Sampler 的 jmx 文件,该文件配置为连接并发布到在远程 activemq artemis 服务器上运行的队列。

我正在使用 activemq-all-5.18.3.jar 以便 JMS Publisher Sampler 能够与远程 activemq artemis 队列进行通信。

activemq-all-5.18.3.jar 将其放置在本地路径上的 Dependencies 文件夹中,然后通过 config.properties 文件将其加载到类路径

user.classpath=./Dependencies

配置文件的调用方式如下:

jmeter -q .\config.properties -t .\test.jmx

GUI 启动后,我运行测试并在 jmeter 日志中收到以下错误:

ERROR o.a.j.JMeter: Uncaught exception in thread Thread[Create 1-1,6,main]
java.lang.NoSuchMethodError: javax.jms.Message.setJMSDeliveryTime(J)V
    at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1993) ~[activemq-all-5.18.3.jar:5.18.3]
    at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:329) ~[activemq-all-5.18.3.jar:5.18.3]
    at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:289) ~[activemq-all-5.18.3.jar:5.18.3]
    at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:224) ~[activemq-all-5.18.3.jar:5.18.3]
    at org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:298) ~[activemq-all-5.18.3.jar:5.18.3]
    at org.apache.jmeter.protocol.jms.client.Publisher.setPropertiesAndSend(Publisher.java:191) ~[ApacheJMeter_jms.jar:5.6.3]
    at org.apache.jmeter.protocol.jms.client.Publisher.publish(Publisher.java:148) ~[ApacheJMeter_jms.jar:5.6.3]
    at org.apache.jmeter.protocol.jms.sampler.PublisherSampler.sample(PublisherSampler.java:233) ~[ApacheJMeter_jms.jar:5.6.3]
    at org.apache.jmeter.protocol.jms.sampler.BaseJMSSampler.sample(BaseJMSSampler.java:98) ~[ApacheJMeter_jms.jar:5.6.3]
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651) ~[ApacheJMeter_core.jar:5.6.3]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570) ~[ApacheJMeter_core.jar:5.6.3]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) ~[ApacheJMeter_core.jar:5.6.3]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) ~[ApacheJMeter_core.jar:5.6.3]
    at java.base/java.lang.Thread.run(Thread.java:834) [?:?]

我希望能够使用 JMS Publisher 采样器发布消息。

我尝试将 jar 依赖项版本更改为当前最新版本(activemq-all-6.1.0.jar)并收到不同的错误:

java.lang.UnsupportedClassVersionError: org/apache/activemq/jndi/ActiveMQInitialContextFactory has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
    at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[?:?]
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) ~[?:?]
    at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:555) ~[?:?]
    at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458) ~[?:?]
    at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452) ~[?:?]
    at java.base/java.security.AccessController.doPrivileged(Native Method) ~[?:?]
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451) ~[?:?]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588) ~[?:?]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
    at java.base/java.lang.Class.forName0(Native Method) ~[?:?]
    at java.base/java.lang.Class.forName(Class.java:398) ~[?:?]
    at java.naming/com.sun.naming.internal.VersionHelper.loadClass(VersionHelper.java:127) ~[?:?]
    at java.naming/com.sun.naming.internal.VersionHelper.loadClass(VersionHelper.java:133) ~[?:?]
    at java.naming/com.sun.naming.internal.VersionHelper.loadClass(VersionHelper.java:100) ~[?:?]
    at java.naming/javax.naming.spi.NamingManager.getFactory(NamingManager.java:757) ~[?:?]
    at java.naming/javax.naming.spi.NamingManager.lambda$getInitialContext$1(NamingManager.java:722) ~[?:?]
    at java.base/jdk.internal.loader.AbstractClassLoaderValue$Memoizer.get(AbstractClassLoaderValue.java:329) ~[?:?]
    at java.base/jdk.internal.loader.AbstractClassLoaderValue.computeIfAbsent(AbstractClassLoaderValue.java:205) ~[?:?]
    at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:722) ~[?:?]
    at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305) ~[?:?]
    at java.naming/javax.naming.InitialContext.init(InitialContext.java:236) ~[?:?]
    at java.naming/javax.naming.InitialContext.<init>(InitialContext.java:208) ~[?:?]
    at org.apache.jmeter.protocol.jms.client.InitialContextFactory.lookupContext(InitialContextFactory.java:66) ~[ApacheJMeter_jms.jar:5.6.3]
    at org.apache.jmeter.protocol.jms.client.InitialContextFactory.getContext(InitialContextFactory.java:155) ~[ApacheJMeter_jms.jar:5.6.3]
    at org.apache.jmeter.protocol.jms.client.Publisher.<init>(Publisher.java:126) ~[ApacheJMeter_jms.jar:5.6.3]
    at org.apache.jmeter.protocol.jms.sampler.PublisherSampler.initClient(PublisherSampler.java:185) ~[ApacheJMeter_jms.jar:5.6.3]
    at org.apache.jmeter.protocol.jms.sampler.PublisherSampler.sample(PublisherSampler.java:209) ~[ApacheJMeter_jms.jar:5.6.3]
    at org.apache.jmeter.protocol.jms.sampler.BaseJMSSampler.sample(BaseJMSSampler.java:98) ~[ApacheJMeter_jms.jar:5.6.3]
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651) ~[ApacheJMeter_core.jar:5.6.3]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570) ~[ApacheJMeter_core.jar:5.6.3]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) ~[ApacheJMeter_core.jar:5.6.3]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) ~[ApacheJMeter_core.jar:5.6.3]
    at java.base/java.lang.Thread.run(Thread.java:834) [?:?]

有谁知道原因是什么以及如何解决它?

jmeter activemq-artemis mq
1个回答
0
投票

您正在使用 ActiveMQ Classic 附带的 OpenWire JMS 客户端。版本 5.18.3 不支持 JMS 2 方法

javax.jms.Message.setJMSDeliveryTime()
。版本 6.0.1 需要 Java 17 或更高版本,这就是您点击
UnsupportedClassVersionError
的原因。

我建议您使用 ActiveMQ Artemis 附带的 Core JMS 客户端。它完全支持 JMS 2 并且不需要 Java 17。如果您要下载它并将其放入 JMeter 类路径中,我推荐这个

© www.soinside.com 2019 - 2024. All rights reserved.