Ошибка JMeter JMS Publisher при попытке публикации в очереди ActiveMQ Artemis: java.lang.NoSuchMethodError: javax.jms.Message.setJMSDeliveryTime(J)V

На компьютере с Windows 10 и Java 11.0.21. Я загрузил последнюю версию JMeter 5.6.3.

У меня есть файл jmx с сэмплером JMS Publisher Sampler, который настроен для подключения и публикации в очереди, работающей на удаленном сервере 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

После запуска графического интерфейса я запускаю тест и получаю следующую ошибку в журнале 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) [?:?]

Кто-нибудь знает, в чем причина и как я могу это исправить?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
118
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете клиент OpenWire JMS, который поставляется с ActiveMQ Classic. Версия 5.18.3 не поддерживает метод JMS 2 javax.jms.Message.setJMSDeliveryTime(), поэтому вы нажимаете NoSuchMethodError. Для версии 6.0.1 требуется Java 17 или выше, поэтому вы нажимаете UnsupportedClassVersionError.

Я рекомендую вам использовать клиент Core JMS, который поставляется с ActiveMQ Artemis. Он полностью поддерживает JMS 2 и не требует Java 17. Для него требуется только Java 11. Если вы загружаете его и добавляете в путь к классам JMeter, я рекомендую этот.

Спасибо. При использовании рекомендованного artemis-jms-client-all-2.32.0.jar мне действительно удается обойти первоначальное сообщение об ошибке, но теперь сэмплер JMS Publisher выдает следующую ошибку: javax.naming.NamingException: javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.activemq.jndi.ActiveMQInitialContextFactory [Root exception is java.lang.ClassNotFoundException: org.apache.activemq.jndi.ActiveMQInitialContextFactory] at org.apache.jmeter.protocol.jms.client.InitialContextFactory.‌​lookupContext(Initia‌​lContextFactory.java‌​:68)... Есть идеи, что еще мне не хватает?

JustNatural 20.03.2024 00:10

Вы где-то указали использование org.apache.activemq.jndi.ActiveMQInitialContextFactory для JNDI — либо в конфигурации сэмплера JMeter, либо, возможно, в файле jndi.properties, который находится в пути к классам. Вам нужно найти место, где вы указали этот класс, и изменить его на org.apache.activemq.artemis.jndi.ActiveMQInitialContextFacto‌​ry.

Justin Bertram 20.03.2024 02:20

Действительно, ваш комментарий оказался в точку! И у издателя JMS, и у подписчика JMS есть свойство с именем «Фабрика начального контекста». Это нужно было изменить с org.apache.activemq.jndi.ActiveMQInitialContextFactory на org.apache.activemq.artemis.jndi.ActiveMQInitialContextFacto‌​ry; Первоначально скрипт работал без этих изменений, но на другой машине, на которой работал openjdk 21.0.1. Теперь, когда я изменил машину и версию Java на 11, мне нужно было адаптировать и это свойство, и используемый jar-файл зависимостей. Большое спасибо за ваши содержательные комментарии!

JustNatural 20.03.2024 08:20

Другие вопросы по теме

Как настроить сервер ActiveMQ Artemis для взаимодействия сообщений через разные протоколы AMQP и Openwire
Как настроить ActiveMQ Artemis для использования AMQP 1.0 и других протоколов с Java
Метод аутентификации настраиваемого диспетчера безопасности не вызывается, когда вbroker.xml настроены кластерные соединения
JMeter JMS Publisher: получение JMSMessageId (сгенерированного во время выполнения) в заголовке и использование его в качестве значения другого свойства JMS перед публикацией
Указанный размер кадра 4381 больше максимального размера кадра SASL 4096 при подключении к серверу ActiveMQ Artemis
ActiveMQ Artemis: адрес Muticast доставляет сообщения непоследовательно
Распределение потребительских подключений ActiveMQ Artemis
Имитация классического дуплексного транспорта с федерацией в Артемиде?
Кластер ActiveMQ Artemis HA с использованием общего хранилища в Windows
Запуск веб-консоли Artemis с отключенной безопасностью?

Похожие вопросы

Как сгенерировать/передать уникальный UUID в потоки, независимые друг от друга в группе потоков JMeter Stepping Thread
JMeter JMS Publisher: получение JMSMessageId (сгенерированного во время выполнения) в заголовке и использование его в качестве значения другого свойства JMS перед публикацией
Нагрузочное тестирование Apache JMeter — нагрузочное тестирование в течение определенного периода времени
JsonPath, как получить идентификаторы записей с минимальным значением атрибута?
JMeter динамически изменяет/перезаписывает значение HTTP-заголовка?
Проблема в сценарии JSR223. JSR223 Sampler:javax.script.ScriptException: groovy.lang.MissingMethodException: нет подписи метода:
Проблема в сценарии JSR223. JSR223 Sampler groovy.lang.MissingPropertyException: нет такого свойства: длина для класса: java.lang.String
Abstracta JMeter Java DSL — изящно завершайте потоки с помощью RPSThreadGroup
Если контроллер для условия ИЛИ в jmeter
Как удалить последние несколько символов даты ISO с помощью JavaScript в jmeter?