Статьи

Выпущен Apache Camel 2.16 — 10 лучших моментов

Apache Camel 2.16 был выпущен в прошлую пятницу. Эта запись в блоге — моя попытка сделать топ-10 (+ 1 в качестве бонуса) основных моментов этого нового выпуска. 2016

1. Динамический К

Весьма вероятно, что главный вопрос часто задаваемых пользователей Camel — как отправить сообщение конечной точке, которая должна использовать динамическое значение из моего сообщения, например заголовок.

До этого выпуска ответом будет список получателей EIP.

Но чтобы сделать это проще, мы представили динамический элемент в DSL, который использует простой язык для динамически вычисляемой конечной точки uri и отправляет сообщение этой единственной конечной точке. Для более сложных вариантов использования ответ по-прежнему остается списком получателей, поскольку он может отправлять несколько конечных точек параллельно и выполнять агрегирование и многое другое.

Итак, пример из FAQ :

1
.to("freemarker://templateHome/${body.templateName}.ftl")

Где решение со списком получателей будет:

1
.recipientList(simple("freemarker://templateHome/${body.templateName}.ftl"))

Теперь можно легко сделать, используя toD:

1
.toD("freemarker://templateHome/${body.templateName}.ftl")

В XML DSL вы бы использовали:

Мы сделали, чтобы и ToD разделены нарочно. Поскольку первый позволяет Camel оптимизировать, поскольку он знает, что это статическая конечная точка, а второй является динамическим.

Динамический to также поддерживается в некоторых других EIP, таких как WireTap, и в rest-dsl .

2. Enrich и PollEnrich теперь поддерживают динамические конечные точки.

Из-за новой динамики, с toD, он смог продвинуться в возможности внедрить это в Content Enricher EIP для enrich и pollEnrich. Это было популярным в течение ряда лет, но изначально планировалось как изменение Camel 3.0. Это работает как toD, поддерживая простой язык в URI.

Небольшой пример:

1
2
3
4
5
from("direct:start")
 
  .enrich().simple("http:myserver/${header.orderId}/order")
 
  .to("direct:result");

Обратите внимание, как мы можем ссылаться на заголовок, используя $ {header.orderId}.

3. Все включено компонент документации

У нас есть 199 компонентов (некоторые варианты, такие как ftp sftp и т. Д.) В этом выпуске. И для каждого отдельного параметра, который вы можете настроить в компоненте, или конечная точка теперь задокументирована с помощью javadoc.

Эта документация затем извлекается во время процесса сборки, что делает ее доступной во время выполнения, к которой вы можете получить доступ, используя Java API, JMX или команды Camel .

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

Это продолжение тех усилий, которые мы начали в Camel 2.12. В предыдущем выпуске Camel 2.15 было много документации, о которой я писал в блоге . С верблюдом 2.16 у нас теперь есть 100% охват документации, и мы включили проверку правильности во время сборки, которая потерпит неудачу из-за отсутствия документации.

С помощью этой функциональности такие инструменты, как hawtio, могут сделать UI украшением, чтобы представить информацию о вашем приложении Camel, такую ​​как показано ниже:

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

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

4. Более глубокий уровень статистики JMX

Мы пересмотрели все EIP, чтобы предложить больше статистики по EIP во время выполнения. Например, Маршрутизатор на основе контента теперь позволяет перечислять все предикаты и разбивать, какие из этих предикатов использовались чаще всего. EIP балансировщика нагрузки также предоставляет статистику, такую ​​как их текущее состояние, какое исключение было вызвано чаще всего, и так далее. Это касается всех различных EIP. Кроме того, конфигурация EIP также выставлена.

Нам также удалось сделать так, чтобы ваши пользовательские компоненты Camel или Java Beans смешивали свои пользовательские атрибуты и операции JMX со стандартным набором атрибутов / операций от Camel. Раньше это было невозможно, и было бы доступно только ваше. Я уже писал об этом в блоге .

5. Входящие и исходящие конечные точки

Теперь мы отслеживаем все входящие и исходящие конечные точки в реестре конечных точек. Реестр доступен из команд Java, JMX и Camel. Реестр также отслеживает частоту использования каждой конечной точки, поэтому вы можете узнать, какие из них используются чаще всего.

Ранее я писал об этом в блоге и записал видео, чтобы продемонстрировать это в действии.

6. Swagger 2.0 на чистой Java

Компонент swagger был портирован на Java как новый модуль camel-swagger-java и обновлен до спецификации swagger 2.0. Мы также интегрировали camel-swagger-java в rest-dsl и смогли использовать выбранный компонент HTTP по своему выбору. Так что, если вы используете jetty с rest-dsl, модуль swagger может использовать его повторно для предоставления api docs через HTTP. Старый модуль, основанный на Scala, устарел и мог только предоставлять API-файлы с помощью сервлета.

Ранее я писал об этом в блоге и записал видео в действии.

7. rest-dsl улучшения

Теперь вы можете настроить документацию для сопоставления параметров остальной службы, для параметров запроса, пути, тела и т. Д.

Вы можете найти более подробную информацию в небольшом примере, который поставляется в Apache Camel.

8. Скрипт DSL

Мы добавили в DSL специальный сценарий , позволяющий выполнять сценарий во время маршрутизации, который по умолчанию не изменяет ваше сообщение. Мы нашли несколько пользователей, желающих это сделать, но немного затруднились с использованием языкового компонента и не забыли установить transform = false. С помощью скрипта DSL он выделяется в маршруте.

Небольшой пример для запуска отличного скрипта

01
02
03
04
05
06
07
08
09
10
11
12
13
<route>
 
  <from uri="file://inbox"/>
 
  <script>
 
    <groovy>// some groovy code goes here</groovy>
 
  </script>
 
  <beanRef ref="myServiceBean" method="processLine"/>
 
</route>

9. Верблюжий прокси проще в использовании с включенной привязкой параметров

Если вы используете прокси-сервер Camel для скрытия промежуточного программного обеспечения за интерфейсом, то при вызове метода (ов) на интерфейсе теперь выполняется привязка параметров заранее. Мы выяснили, что это более интуитивно понятно и позволяет сопоставить эти параметры с телом / заголовками сообщения и т. Д., Как вы это сделали бы с компонентом компонента.

Смотрите подробности на Camel прокси .

10. Несколько других замечательных новых вещей

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

Мы также предоставляем архетипы Maven для создания стиля микросервиса с использованием spring-boot и cdi.

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

11. Больше компонентов

Появилось 12 новых компонентов и 3 новых формата данных.

  • camel-paho — для обмена сообщениями MQTT с использованием клиента Eclipse Paho
  • camel-pdf — Для создания PDF документов
  • camel-grape — позволяет получать, загружать и управлять дополнительными банками во время работы CamelContext.
  • camel-slack — позволяет подключиться к экземпляру Slack и доставляет сообщение, содержащееся в теле сообщения, через предварительно установленный входящий веб-крючок Slack.
  • верблюд-толчок — для преобразования JSON в JSON
  • camel-aws-ec2 — компонент, обеспечивающий поддержку Amazon Web Services EC2
  • camel-undertow — использовать Undertow в качестве HTTP-сервера или клиента.
  • camel-git — универсальный компонент Git
  • camel-sjms — SJMS Batch — это специализированный компонент для высокопроизводительного транзакционного пакетного потребления из очереди JMS.
  • camel-http-common — общий базовый компонент для повторного использования среди всех имеющихся у нас HTTP-компонентов.
  • camel-swagger-java — Чистый Java-компонент Swagger.
  • camel-elsql — расширенный компонент SQL, который использует ElSql для определения запросов SQL
  • camel-jbpm — отправляет сообщения через API kie-remote-client в jBPM.

Например, есть универсальный компонент git, компонент pdf для вывода документов PDF и новый компонент JMS для пакетной обработки, который позволяет пакетировать по X количеству сообщений JMS и объединять их в одно сообщение, все в пределах транзакции.

Подробный список изменений в этом выпуске см. В заметках о выпуске Camel 2.16 . Как всегда, обязательно прочитайте важные изменения, которые следует учитывать при обновлении раздела, когда вы обновляете более раннюю версию Camel.