Вопрос по – Передача значений между процессорами в Apache Camel

23

В Apache Camel, какой из них является лучшим способом передачи значений от обменного процессора к другому (и почему):

сохранение его в заголовках обменаиспользуяsetProperty метод при построении маршрута.по-другому.

Ваш Ответ

4   ответа
26

однако, преобразуются в / из заголовков протокола для определенных компонентов, таких как Jms. Так

Метаданные внутри маршрута: свойства Метаданные в / из снаружи: заголовки
48

не упомянутых Беном и Петтером, заключается в том, что свойства надежно хранятся на протяжении всей обработки сообщения в Camel. Напротив, заголовки являются частью протокола сообщения и могут не распространяться во время маршрутизации. Например, JMS имеет ограничения, которые вы можете хранить как заголовки и т. Д.

Возможно, вы захотите прочитать бесплатную главу 1 книги «Верблюд в действии», так как в ней рассматриваются концепции верблюда с помощью Exchange, Message и т.

В случае JMS свойства не распространяются вообще, а заголовки рекомендуются для прохождения дня. Разве это не правильно или я что-то упустил? Bilgin Ibryam
+ 1 Это важное различие. В общем, если вы хотите быть уверены, что данные, которые вы устанавливаете, окажутся там, где вы хотите, тогда я настоятельно рекомендую вам использовать свойства. Я был сожжен этим в прошлом, когда кто-то добавил шаг JMS в середину маршрута, по которому я передавал информацию, хранящуюся в заголовках, и информация просто перестала проходить. Dawood ibn Kareem
Может быть, это условия. Свойства JMS body + - это термины JMS. В Camel его тело + заголовки в сообщении и свойства в Exchange. Тело верблюда карт -> тело и заголовки -> свойства JMS. Claus Ibsen
Кажется, JMSProperties не поддерживает коллекцию Java как тип. Это следует учитывать, если вам нужно несколько значений для одного и того же заголовка. Единственный способ, который мы нашли, это сериализовать карту в теле с помощьюmarshal().xstream() перед отправкой в конечную точку очереди. рüффп
safely? ты имеешь ввиду установить разные свойства видишь только в текущей обработке? Chao
0

Properties: свойства являются картой и могут выглядеть как заголовки сообщений. Основное различие заключается в их времени жизни: свойства существуют в течение всего выполнения обмена, тогда как заголовки ограничены продолжительностью сообщения (и сообщение может сильно измениться во время маршрутизации, поэтому во время выполнения обмена). Сам верблюд может добавить некоторые свойства для некоторых случаев использования.

19

Обмен передается между процессорами. Он содержит свойства, сообщение IN и необязательное сообщение OUT. Каждый из них способен хранить данные объекта, но в целом:

использовать свойства Exchange для общих метаданных о сообщении (используется реже) использовать заголовки сообщений IN для настройки свойств конечных точек или для метаданных о теле сообщения (используется часто) использовать тело сообщения IN для полезной нагрузки сообщения (используется чаще всего) создавать сообщение OUT только в случае необходимости поддерживать отдельные сообщения IN и OUT во время обработки (по умолчанию используется только IN)

Тем не менее, это действительно зависит от компонента, называемого следующим вашим процессором. Большинство из них имеют некоторые заголовки и / или значения тела, которые требуются для использования конечной точки и т. компонентная страница для этих деталей.

Кроме того, Exchange / Message более подробно описаны на этих страницах:

http: //camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Exchange.htm

http: //fusesource.com/docs/router/2.8/prog_guide/MsgFormats-Exchanges.htm

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