Как и какие типы поддерживаются при обмене данными между компонентами в Apache Camel. Я хотел бы понять волшебство, которое творится внутри него. Потому что в документе просто говорится, что вы потребляете данные из файловой системы или FTP, сообщение из JMS, данные SQL и множество других возможностей и отправляете их производителю, который волшебным образом, кажется, принимает что-либо и выводит также множество возможностей.
И меня интересует тот же вопрос по поводу обогащения. Все эти разъемы кажутся чрезвычайно гибкими, и я не смог найти никаких ссылок на то, что там поддерживает. Я хочу написать компонент для системы, но не смог найти хорошего способа сделать это.
Я видел, что верблюд работает с классом Exchange и использует его для отправки сообщений между компонентами. Я не совсем понимаю, как компоненты работают с различными возможными типами сообщений.
Не забудьте объявить эти настраиваемые преобразователи в META-INF раздел ресурсов, хотя в противном случае Camel не подхватит их по умолчанию и, следовательно, не сможет соответствующим образом преобразовать сообщения.
@RomanVottner, так что технически даже существующие компоненты не все совместимы друг с другом, верно?
Конвертер - это просто сопоставление двух (или нескольких) форматов. Как Camel должен знать, как преобразовать один формат данных в другой, если он не был проинструктирован? Конечно, вы всегда можете вернуться к одному из значений по умолчанию, содержащихся в camel-core (например, InputStream или byte [])




Рекомендую вам взглянуть на книгу Клауса Ибсена и Джонатана Ансти «Верблюд в действии». Раньше у меня возникали подобные вопросы. Там им прекрасно даны ответы. Глава 11.3 проведет вас через создание вашего собственного компонента. Кроме того, вы можете начать с этого github ссылка на сайт. В нем есть пример того, как создать свой собственный компонент.
Camel может знать, какие типы вы передаете в теле сообщения, поэтому он предлагает вам несколько способов преобразования полезной нагрузки, начиная с создания процессора для преобразования и заканчивая использованием метода Java DSL transform, который принимает Expression.
Просто будьте готовы разобраться в случае, когда неизвестный объект потребляется. Не беспокойтесь обо всех входящих объектах. Все зависит от того, как реализованы Потребители.
Я уже прошел этапы создания компонента, и я проделал некоторую начальную работу над тем, который я хочу создать, выходит за рамки отправки строк. Но, не зная этого ответа, я могу сделать несколько неправильных предположений ...
Это зависит от того, какие у вас могут быть случаи. Что вы потребляете? файлы? Объекты?
Я буду использовать файлы с необязательными настраиваемыми метаданными ... Я добавил метаданные через вложения в объекте Exchange. Я не знаю, правильный ли это подход
Да, это подойдет, но имейте в виду, что если в какой-то момент маршрута вы решите выполнить некоторую обработку и поместите результат в сообщение "out", не забудьте переместить все заголовки и вложения из "in" "сообщение, так как они не перемещаются автоматически.
если я не выставлю, все ли будет по умолчанию? Или следующая конечная точка получит пустое сообщение?
Если вы произведете некоторую обработку и установите обновленное тело в сообщение "in" и не будете трогать "out". По умолчанию он автоматически перемещает тело, заголовки и вложения в положение «вне».
У Camel есть пара встроенные преобразователи, которые охватывают уже огромное количество форматов. Если вам нужны более специализированные (например, преобразование сообщений между Apache CXF и Camel), компонент также может указать собственные преобразователи