Типы данных Apache Camel между компонентами

Я не смог найти никакой документации по этому поводу на веб-сайте Apache Camel.


Как и какие типы поддерживаются при обмене данными между компонентами в Apache Camel. Я хотел бы понять волшебство, которое творится внутри него. Потому что в документе просто говорится, что вы потребляете данные из файловой системы или FTP, сообщение из JMS, данные SQL и множество других возможностей и отправляете их производителю, который волшебным образом, кажется, принимает что-либо и выводит также множество возможностей.

  • Они написали конвертеры для всех во все типы во фреймворке?

И меня интересует тот же вопрос по поводу обогащения. Все эти разъемы кажутся чрезвычайно гибкими, и я не смог найти никаких ссылок на то, что там поддерживает. Я хочу написать компонент для системы, но не смог найти хорошего способа сделать это.

  • Надо ли писать конвертеры для всех возможных типов, которые могут появиться?

Я видел, что верблюд работает с классом Exchange и использует его для отправки сообщений между компонентами. Я не совсем понимаю, как компоненты работают с различными возможными типами сообщений.

У Camel есть пара встроенные преобразователи, которые охватывают уже огромное количество форматов. Если вам нужны более специализированные (например, преобразование сообщений между Apache CXF и Camel), компонент также может указать собственные преобразователи

Roman Vottner 22.05.2018 13:58

Не забудьте объявить эти настраиваемые преобразователи в META-INF раздел ресурсов, хотя в противном случае Camel не подхватит их по умолчанию и, следовательно, не сможет соответствующим образом преобразовать сообщения.

Roman Vottner 22.05.2018 14:01

@RomanVottner, так что технически даже существующие компоненты не все совместимы друг с другом, верно?

Augusto 22.05.2018 14:27

Конвертер - это просто сопоставление двух (или нескольких) форматов. Как Camel должен знать, как преобразовать один формат данных в другой, если он не был проинструктирован? Конечно, вы всегда можете вернуться к одному из значений по умолчанию, содержащихся в camel-core (например, InputStream или byte [])

Roman Vottner 22.05.2018 14:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
191
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Рекомендую вам взглянуть на книгу Клауса Ибсена и Джонатана Ансти «Верблюд в действии». Раньше у меня возникали подобные вопросы. Там им прекрасно даны ответы. Глава 11.3 проведет вас через создание вашего собственного компонента. Кроме того, вы можете начать с этого github ссылка на сайт. В нем есть пример того, как создать свой собственный компонент.

Camel может знать, какие типы вы передаете в теле сообщения, поэтому он предлагает вам несколько способов преобразования полезной нагрузки, начиная с создания процессора для преобразования и заканчивая использованием метода Java DSL transform, который принимает Expression.

Просто будьте готовы разобраться в случае, когда неизвестный объект потребляется. Не беспокойтесь обо всех входящих объектах. Все зависит от того, как реализованы Потребители.

Я уже прошел этапы создания компонента, и я проделал некоторую начальную работу над тем, который я хочу создать, выходит за рамки отправки строк. Но, не зная этого ответа, я могу сделать несколько неправильных предположений ...

Augusto 22.05.2018 11:30

Это зависит от того, какие у вас могут быть случаи. Что вы потребляете? файлы? Объекты?

Rostislav V 22.05.2018 11:52

Я буду использовать файлы с необязательными настраиваемыми метаданными ... Я добавил метаданные через вложения в объекте Exchange. Я не знаю, правильный ли это подход

Augusto 22.05.2018 14:06

Да, это подойдет, но имейте в виду, что если в какой-то момент маршрута вы решите выполнить некоторую обработку и поместите результат в сообщение "out", не забудьте переместить все заголовки и вложения из "in" "сообщение, так как они не перемещаются автоматически.

Rostislav V 22.05.2018 14:33

если я не выставлю, все ли будет по умолчанию? Или следующая конечная точка получит пустое сообщение?

Augusto 22.05.2018 14:36

Если вы произведете некоторую обработку и установите обновленное тело в сообщение "in" и не будете трогать "out". По умолчанию он автоматически перемещает тело, заголовки и вложения в положение «вне».

Rostislav V 22.05.2018 14:40

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