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