Language

Поддерживается только производитель

Компонент «language» позволяет отправлять данные Exchangeв конечную точку, которая выполняет скрипт на любом из поддерживаемых в Camel языков.

Наличие компонента для выполнения языковых скриптов обеспечивает более динамичную маршрутизацию. Например, используя протоколы маршрутизации Routing Slip или Dynamic Router (opens in a new tab) EIP, вы можете отправлять сообщения languageконечным точкам, где скрипт также определяется динамически.

Вам нужно будет включать дополнительные компоненты Camel только в том случае, если этого требует выбранный вами язык, например, если вы используете языки Groovy (opens in a new tab) или JavaScript (opens in a new tab) .

URI format

language://languageName[:script][?options]

Вы можете ссылаться на внешний ресурс для скрипта, используя ту же нотацию, которая поддерживается другими языками (opens in a new tab) в Camel.

language://languageName:resource:scheme:location][?options]

Configuring Options

Компоненты Camel настраиваются на двух отдельных уровнях:

  • уровень компонентов

  • уровень конечной точки

Configuring Component Options

На уровне компонентов задаются общие и общие конфигурации, которые затем наследуются конечными точками. Это самый высокий уровень конфигурации.

Например, компонент может иметь настройки безопасности, учетные данные для аутентификации, URL-адреса для сетевого подключения и т. д.

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

Вы можете настроить компоненты, используя:

  • Компонент DSL (opens in a new tab) .

  • в файле конфигурации ( application.propertiesфайлы *.yaml, и т.д.).

  • непосредственно в коде Java.

Configuring Endpoint Options

Настройка конечных точек обычно занимает больше времени, поскольку у них есть множество параметров. Эти параметры помогают вам настроить функции конечной точки. Параметры также классифицируются по тому, используется ли конечная точка как потребитель ( от ), как производитель ( от ) или и то, и другое.

Конечные точки чаще всего настраиваются непосредственно в URI конечной точки в виде параметров пути и запроса . Вы также можете использовать Endpoint DSL (opens in a new tab) и DataFormat DSL (opens in a new tab) в качестве типобезопасного способа настройки конечных точек и форматов данных в Java.

Хорошей практикой при настройке параметров является использование заполнителей свойств (opens in a new tab) .

Заполнители свойств обеспечивают несколько преимуществ:

  • Они помогают предотвратить использование жестко запрограммированных URL-адресов, номеров портов, конфиденциальной информации и других настроек.

  • Они позволяют вынести конфигурацию за пределы кода.

  • Они помогают коду стать более гибким и пригодным для повторного использования.

В следующих двух разделах перечислены все параметры, сначала для компонента, а затем для конечной точки.

Component Options

Компонент «language» поддерживает 4 параметра, которые перечислены ниже.

allowTemplateFromHeader (producer)

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

  • По умолчанию: false

  • Тип: boolean

contentCache (producer)

  • Устанавливает, использовать ли кэш содержимого ресурсов или нет.

  • По умолчанию: true

  • Тип: boolean

lazyStartProducer (producer)

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

  • По умолчанию: false

  • Тип: boolean

autowiredEnabled (advanced)

  • Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.

  • По умолчанию: true

  • Тип: boolean

Endpoint Options

Конечная точка языка настраивается с использованием синтаксиса URI:

language:languageName:resourceUri

Со следующими параметрами пути и запроса :

Path Parameters (2 parameters)

languageName (producer)

  • Обязательно Задает название используемого языка.

    Значения перечисления:

    • bean

    • constant

    • csimple

    • datasonnet

    • exchangeProperty

    • file

    • groovy

    • header

    • hl7terser

    • java

    • joor

    • jq

    • js

    • jsonpath

    • mvel

    • ognl

    • python

    • ref

    • simple

    • spel

    • tokenize

    • variable

    • wasm

    • xpath

    • xquery

    • xtokenize

  • По умолчанию:

  • Тип: String

resourceUri (producer)

  • Путь к ресурсу или ссылка для поиска компонента в реестре для использования в качестве ресурса.

  • По умолчанию:

  • Тип: String

Query Parameters (9 parameters)

allowContextMapAll (producer)

  • Тип: Определяет, должна ли карта контекста разрешать доступ ко всем данным. По умолчанию доступен только текст и заголовки сообщения. Этот параметр можно включить для полного доступа к текущему Exchange и CamelContext. Это может представлять потенциальную угрозу безопасности, поскольку открывает доступ ко всем возможностям API CamelContext.

  • По умолчанию: false

  • Тип: boolean

allowTemplateFromHeader (producer)

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

  • По умолчанию: false

  • Тип: boolean

contentCache (producer)

  • Устанавливает, использовать ли кэш содержимого ресурсов или нет.

  • По умолчанию: true

  • Тип: boolean

resultType (producer)

  • Устанавливает класс типа результата (тип из вывода).

  • По умолчанию:

  • Тип: String

script (producer)

  • Запускает скрипт на выполнение.

  • По умолчанию:

  • Тип: String

transform (producer)

  • Тип: Использовать ли результат выполнения скрипта в качестве текста сообщения. Значение по умолчанию -- true.

  • По умолчанию: true

  • Тип: boolean

lazyStartProducer (producer (advanced))

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

  • По умолчанию: false

  • Тип: boolean

binary (advanced)

  • Независимо от того, является ли скрипт двоичным или текстовым содержимым, по умолчанию скрипт читается как текстовое содержимое (например, java.lang.String).

  • По умолчанию: false

  • Тип: boolean

cacheScript (advanced)

  • Следует ли кэшировать скомпилированный скрипт и использовать его повторно. Обратите внимание, что повторное использование скрипта может вызвать побочные эффекты от обработки одного Camel org.apache.camel.Exchange в следующем org.apache.camel.Exchange.

  • По умолчанию: false

  • Тип: boolean

Message Headers

КомпонентLanguage поддерживает 1 заголовок(и) сообщения, которые перечислены ниже:

CamelLanguageScript (producer)

Constant: LANGUAGE_SCRIPT (opens in a new tab)

  • Скрипт для выполнения, указанный в заголовке. Имеет приоритет над скриптом, настроенным на конечной точке.

  • По умолчанию:

  • Тип: String or Expression

Examples

Например, вы можете использовать простой (opens in a new tab) язык как переводчик сообщений (opens in a new tab) EIP:

from("direct:hello")
    .to("language:simple:Hello ${body}")

Если вы хотите преобразовать тип текста сообщения, вы также можете это сделать. Однако лучше использовать функцию Convert Body To (opens in a new tab) :

from("direct:toString")
    .to("language:simple:${bodyAs(String.class)}")

Вы также можете использовать язык Groovy (opens in a new tab) , как в этом примере, где входящее сообщение будет умножено на 2:

from("direct:double")
    .to("language:groovy:${body} * 2}")

Вы также можете предоставить скрипт в качестве заголовка, как показано ниже. Здесь мы используем язык XPath (opens in a new tab) для извлечения текста из <foo>тега.

Object out = producer.requestBodyAndHeader("language:xpath", "<foo>Hello World</foo>", Exchange.LANGUAGE_SCRIPT, "/foo/text()");
assertEquals("Hello World", out);

Loading scripts from resources

Вы можете указать URI ресурса для загрузки скрипта либо в URI конечной точки, либо в Exchange.LANGUAGE_SCRIPTзаголовке. URI должен начинаться с одной из следующих схем: file:, classpath:, илиhttp:

from("direct:start")
        // load the script from the classpath
        .to("language:simple:resource:classpath:org/apache/camel/component/language/mysimplescript.txt")
        .to("mock:result");

По умолчанию скрипт загружается один раз и кэшируется. Однако вы можете отключить эту contentCacheопцию и загружать скрипт при каждой проверке. Например, если файл myscript.txtна диске изменён, будет использоваться обновлённый скрипт:

from("direct:start")
        // the script will be loaded on each message, as we disabled cache
        .to("language:simple:myscript.txt?contentCache=false")
        .to("mock:result");

Вы также можете ссылаться на скрипт как на ресурс, аналогично тому, как функционируют все другие языки (opens in a new tab) в Camel, добавляя префикс , resource:как показано ниже:

from("direct:start")
    .to("language:constant:resource:classpath:org/apache/camel/component/language/hello.txt")
    .to("mock:result");

Spring Boot Auto-Configuration

При использовании языка с Spring Boot обязательно используйте следующую зависимость Maven для поддержки автоматической настройки:

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-language-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>

Компонент поддерживает 5 опций, которые перечислены ниже.

camel.component.language.allow-template-from-header

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

  • По умолчанию: false

  • Тип: Boolean

camel.component.language.autowired-enabled

  • Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.

  • По умолчанию: true

  • Тип: Boolean

camel.component.language.content-cache

  • Устанавливает, использовать ли кэш содержимого ресурсов или нет.

  • По умолчанию: true

  • Тип: Boolean

camel.component.language.enabled

  • Включить ли автоматическую настройку языкового компонента. По умолчанию эта опция включена.

  • По умолчанию:

  • Тип: Boolean

camel.component.language.lazy-start-producer

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

  • По умолчанию: false

  • Тип: Boolean