#apache-camel #quarkus
Вопрос:
Я использую apache-camel-quarkus для чтения из очереди RabbitMQ, и в производстве все работает нормально. Но когда я запускаю его в режиме разработки и пытаюсь выполнить вариант использования, в котором используется RabbitMQ, я получаю исключение при десериализации сообщения из очереди
java.lang.ClassNotFoundException: messaging.model.ReportAvailableMessage
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:429)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:405)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at java.base/java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:756)
at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1995)
at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1862)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2169)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1679)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:493)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:451)
at org.apache.camel.component.rabbitmq.RabbitMQMessageConverter.deserializeBody(RabbitMQMessageConverter.java:354)
at org.apache.camel.component.rabbitmq.RabbitMQMessageConverter.populateMessageBody(RabbitMQMessageConverter.java:344)
at org.apache.camel.component.rabbitmq.RabbitMQMessageConverter.populateRabbitExchange(RabbitMQMessageConverter.java:289)
Это как-то связано с путем к классам в режиме разработки.
То же самое произошло с интеграционными тестами, и мне пришлось использовать это свойство, чтобы исправить это
quarkus.test.flat-class-path=true
Я провел некоторый поиск и попытался использовать quarkus.class-loading.parent-first-artifacts
идентификатор артефакта в своем приложении, но он также не работал.
Кто-нибудь знает, как я могу это исправить? Спасибо
Ru: Версия для кварка: 2.4.0.Окончательная, Camel: 2.2.0
Комментарии:
1. В документации Quarkus говорится, что «Изменяет тесты для использования «плоского» пути к классу, используемого в версиях Quarkus 1.x. Это означает, что все классы Quarkus и test загружаются в один и тот же загрузчик классов, однако это означает, что вы не можете использовать непрерывное тестирование. Обратите внимание, что если вы сочтете это необходимым для вашего приложения, то у вас также могут возникнуть проблемы при работе в режиме разработки, в котором не может использоваться плоский путь к классу.» Таким образом, может оказаться, что вы вообще не сможете использовать режим разработки, если вам требуется, чтобы этот параметр был истинным.
2. @StefanR использование этого флага в тестах-это обходной путь для развертывания приложения в рабочей среде после запуска интеграционных тестов. Но в этом не должно быть необходимости, так как это прекрасно работает в производстве. Вот почему я опубликовал этот вопрос, так как кажется, что что-то несовместимо с режимом разработки или тестами при использовании RabbitMQ consumer от camel-quarkus