JMeter JMS Publisher发布消息至ActiveMQ Artemis时遇报错求助
错误原因及解决方法
第一个错误:java.lang.NoSuchMethodError: javax.jms.Message.setJMSDeliveryTime(J)V
原因
你用的activemq-all-5.18.3.jar是ActiveMQ Classic的全量包,依赖JMS 2.0规范,但Java 11自带的javax.jms类是旧版本,缺少setJMSDeliveryTime方法。同时JMeter自身也带有JMS相关类,类加载优先级冲突,导致优先加载了Java自带的旧JMS类,而非activemq-all里的实现。另外你连接的是ActiveMQ Artemis,用ActiveMQ Classic的客户端本身就存在兼容性问题。
解决方法
- 替换jar包:不要用
activemq-all-5.18.3.jar,改用ActiveMQ Artemis专属的客户端jar包(比如artemis-jms-client.jar),选择和远程Artemis服务器版本兼容的版本,将其放入Dependencies文件夹。 - 调整类加载优先级:编辑JMeter的
jmeter.properties文件,设置classloader.user_priority=10,让用户自定义类路径下的jar包优先加载,避免和JMeter自带类冲突。 - 修正JMS配置:连接Artemis时,初始上下文工厂要改为
org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory,而非ActiveMQ Classic的工厂类。
第二个错误:java.lang.UnsupportedClassVersionError(类文件版本61.0 vs 55.0)
原因
activemq-all-6.1.0.jar是用Java 17编译的(类文件版本61对应Java 17),而你当前使用的Java 11最高只支持类文件版本55,版本不兼容导致无法加载类。
解决方法
二选一即可:
- 升级Java版本:把Java 11换成Java 17及以上,适配
activemq-all-6.1.0.jar的编译要求; - 降级客户端jar包:选择支持Java 11的ActiveMQ/Artemis客户端版本,比如ActiveMQ Classic 5.18.x系列(但仍建议用Artemis专属客户端),或者Artemis 2.30.x及以下版本(需确认官方兼容性说明)。
额外注意事项
- 不要在
Dependencies文件夹中同时存放多个版本的JMS客户端jar包,避免类冲突; - 确认
config.properties中的user.classpath=./Dependencies配置路径正确,无拼写错误; - 运行JMeter前,清理JMeter的临时缓存(比如
bin目录下的tmp文件夹),避免残留旧类文件影响加载。
内容的提问来源于stack exchange,提问作者JustNatural
相关产品推荐
相关产品推荐

