Статьи

Apache Camel 3 — Что нового в топ-10

Apache Camel 3 был выпущен в прошлый четверг 28 ноября 2019 года, который также является днем ​​благодарения США. Это не было преднамеренно, но мы можем сказать, что это большое спасибо от нас сообществу с новой основной версией Camel — это случается не часто. Фактически прошло 10 лет с тех пор, как Camel 2 вышел на улицы. Так что это 3-е поколение давно пора.

В этом сообщении блога освещаются заслуживающие внимания новые функции и улучшения в Camel v3.

1) CAMEL СЕЙЧАС СЕМЬЯ ПРОЕКТОВ

Apache Camel, сейчас это семейство проектов (на момент написания 3):

  • Camel 3 : Integration Framework Швейцарский нож интеграции
  • Camel K : легкая серверная платформа интеграции Camel на Kubernetes & Knative
  • Camel Quarkus : расширения Camel для оптимизированной Quarkus JVM и скомпилированной нативной Java (GraalVM)

Кодовая база Camel очень велика, и у нас есть настройка подпроектов для новых инновационных проектов с использованием Camel. Первый подпроект состоял в том, чтобы запустить Camel как облачный сервер Kubernetes без использования сервера, который стал Camel K. Затем Camel Quarkus сделал Java и Camel с очень быстрым запуском и очень маленьким объемом памяти в основном для развертываний на основе контейнеров.

2) НОВЫЙ САЙТ

Основная цель для Camel 3 состояла в том, чтобы наконец обновить старый устаревший веб-сайт, чтобы использовать современные технологии и иметь возможность автоматически генерировать контент из исходного кода. На это ушли годы, поскольку мы создали инструменты для последних выпусков Camel 2.x, которые могут приблизить нас. В конце 2019 года сообщество Camel и другие присоединились к нему и предоставили новую обложку, логотип и внешний вид для нового сайта — большое спасибо !.


Для Camel 3.x мы продолжим улучшать сайт и документацию. Нам намного легче это делать, а также людям вносить изменения, поскольку это просто регулярный пиар Github для предоставления обновлений. Мы любим вклады.

Зоран повеселился с новым внешним видом и ощущением, и он добавил немного драгоценного камня; если вы смотрите на первую страницу, то вы должны увидеть небольшую анимацию изогнутой рамки;)

3) JAVA 11

Camel 3 является первым официальным выпуском, поддерживающим Java 11. Java 8 будет по-прежнему поддерживаться для первого числа выпусков 3.x, но ожидается, что он выйдет позднее в 2020 году. Однако мы хотели предоставить поддержку Java 8, чтобы помочь в миграции Camel 2.x пользователей, которые могут быть ограничены Java 8 в течение некоторого времени.

4) МОДУЛЯРИЗОВАННЫЙ CAMEL-CORE

Ядро верблюда было модульным с 1 JAR до 33 JAR. Основная функциональность была разделена на:

1
camel-api<br>camel-base<br>camel-caffeine-lrucache<br>camel-cloud<br>camel-core<br>camel-core-engine<br>camel-core-osgi<br>camel-core-xml<br>camel-endpointdsl<br>camel-headersmap<br>camel-jaxp<br>camel-main<br>camel-management-api<br>camel-management-impl<br>camel-support<br>camel-util<br>camel-util-json

Для конечных пользователей Camel актуально только несколько JAR.

camel-api содержит публичный API для Camel (например, такие интерфейсы, как CamelContext, Endpoint, Exchange, Message и т. д.).

camel-support содержит базовые классы и RouteBuilder, которые вы использовали бы для создания Camel-маршрутов и приложений. Этот JAR также содержит необходимые базовые классы для создания пользовательских компонентов Camel и других видов плагинов.

Компоненты, которые находились в верблюжьем ядре, также были выделены в отдельные компоненты:

1
camel-bean<br>camel-log<br>camel-stub<br>camel-browse<br>camel-mock<br>camel-timer<br>camel-controlbus<br>camel-properties<br>camel-validator<br>camel-dataformat<br>camel-ref<br>camel-vm<br>camel-direct<br>camel-rest<br>camel-xpath<br>camel-directvm<br>camel-saga<br>camel-xslt<br>camel-file<br>camel-scheduler<br>camel-zip-deflater<br>camel-language<br>camel-seda

Конечные пользователи Camel могут затем выбирать только то, что им нужно, или продолжать использовать все.

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

верблюжий ядро содержит 33 банки и
Верблюжий двигатель содержит 12 банок.

5) Быстрый запуск и нижний след

Мы уменьшили размер ядра Camel и количество загруженных классов. Например, в Camel 2 было загружено около 5200 классов, а в Camel 3 — около 4300 загруженных классов.

Мы также сделали много меньших оптимизаций в ядре, чтобы уменьшить количество выделенных объектов Java, а также ускоренную инициализацию и другие средства. Мы использовали инструменты профилирования JVM, чтобы помочь и найти узкие места.

Еще одна область улучшения заключается в уменьшении отражений Java. В Camel 2 вся конфигурация компонентов, конечных точек и маршрутов Camel основана на отражении. В Camel 3 у нас есть исходный код, сгенерированный Java-код для конфигурации, который позволяет нам использовать прямые вызовы Java вместо отражений.

Другая похожая область — это преобразователи типов Camel, которые в Camel 2 основаны на отражениях Java (вы можете создавать собственные преобразователи типов, не основанные на отражениях). В Camel 3 мы также генерируем исходный код Java, что означает, что преобразование типов — это прямые вызовы Java во время выполнения.

Мы также перенесли логику инициализации на более ранние этапы, когда это было возможно. Например, есть новая фаза сборки, которая позволяет Camel выполнять специальную инициализацию во время сборки вашего проекта (для этого требуется Camel Quarkus).

Вся эта оптимизация улучшает производительность при запуске Camel и уменьшает накладные расходы памяти. С Camel Quarkus вы можете скомпилировать свое приложение Camel и запустить его за 30 миллисекунд, используя всего 10 Мб памяти (RSS) с полноценным сервером HTTP REST, а также проверки работоспособности и показатели.

В повестке дня есть еще несколько пунктов, над которыми мы хотим работать в Camel 3.x для дальнейшей оптимизации ядра Camel.

6) ТИП БЕЗОПАСНЫЙ ENDPOINT DSL

Конечные пользователи Camel, которые настроили конечные точки с использованием строк URI, столкнулись бы с этой проблемой, когда вы допустили ошибку конфигурации в конечной точке, которая затем приводит к сбою Camel при запуске.

В Camel 3 у нас есть новый типобезопасный DSL для конечных точек, который вы можете использовать в маршрутах Java. Вы можете продолжать использовать классические строки URI, но если вы хотите попробовать DSL конечной точки, вам нужно добавить camel-endpointdsl в ваш путь к классам. Затем вы должны расширить EndpointRouteBuilder вместо RouteBuilder для доступа к конечной точке DSL.

Вот базовый пример без и с конечной точкой DSL:

из ( «таймера: Нажимаит период = 3000 & fixedRate = истинные»)

.то ( «Седа: Foo blockWhenFull = истина?»);

из (таймер ( «щелчок»). период (3000) .fixedRate (истина))

.то (Седа ( «Foo») blockWhenFull (истина).);

Вы также можете найти маленький пример в исходном коде.

7) РЕАКТИВНЫЙ МАРШРУТНЫЙ ДВИГАТЕЛЬ

Механизм маршрутизации в Camel был внутренне активирован, и все EIP были модифицированы для реактивной работы. Однако это только для внутреннего использования, и API-интерфейс Camel для конечных пользователей и разработчиков компонентов основан на существующем поведении обратного вызова.

Позже мы представим и будем работать над реагирующим API на стороне клиента после перехода на Java 11 в качестве минимальной версии (тогда мы сможем поддерживать текучий API Java 9).

Camel уже имеет интеграцию с реактивными средами, такими как Vert.X, RxJava и Reactor Core, в выделенные компоненты Camel.

8) CAMEL MAIN

Мы представили Camel-main как автономный JAR, который облегчает запуск только Camel. Есть пара примеров с исходным кодом, который демонстрирует, как это сделать.

Мы также используем camel-main, чтобы иметь общий код для настройки и начальной загрузки Camel для автономной версии, Spring Boot, Camel K и Camel Quarkus. Это позволяет нам совместно использовать тот же код и параметры конфигурации.

9) КАМЕЛЬНЫЙ МИКРОПРОФИЛЬ

Camel 3 теперь лучше интегрируется с Eclipse Microprofile, и у нас есть компоненты Camel для конфигурации Microprofile, метрик, проверок работоспособности и отказоустойчивости (в пути).

Больше компонентов, чтобы прибыть в будущих выпусках Camel. Эти компоненты микропрофиля также используются Camel Quarkus.

10) РАЗНОЕ УЛУЧШЕНИЕ

Camel 3 теперь поддерживает JUnit 5 для модульных тестов, с тестовыми компонентами, которые имеют -junit5 в качестве суффикса.

Реестр Camel теперь также доступен для записи, поэтому вы можете добавлять бины в реестр во время выполнения, модульных тестов и т. Д.

Вы также можете настроить конечные точки (производитель) на ленивый запуск. По умолчанию Camel работает в быстродействующем режиме, что означает, что компоненты Camel, которые не могут подключиться к внешним системам во время запуска, могут вызвать сбой маршрута при запуске. Для Camel 3 вы можете теперь настроить эти конечные точки для ленивого запуска, что означает, что маршрут запустится, и они сначала потерпят неудачу, когда сообщение направлено в конечную точку.

Camel также позволяет настраивать маршруты, которые будут контролироваться во время запуска, что позволяет Camel более интеллектуально запускать маршруты более безопасным способом, перезапуская неудачные маршруты.

11) МИГРАЦИЯ НА 3-Й КАМЕЛЬ

Мы, конечно, очистили базу кода, например, удалили все устаревшие API и компоненты. Мы также настроили некоторые API-интерфейсы, чтобы сделать их более удобными для использования конечными пользователями, и стали более дружественными к лямбда-версиям Java 8.

Внутренне мы также скорректировали модель маршрута, чтобы было проще расширять ее на новые DSL; и есть YAML DSL на пути, который был инициирован в Camel K.

Что касается обратной совместимости, то Camel 3 в основном совместим с обычными приложениями Camel. Однако, если вы используете некоторые из более продвинутых функций и других плагинов в Camel, то миграция необходима. Также пользовательские компоненты должны быть перенесены и перекомпилированы. Существуют и другие настройки, например, пользователи Spring Boot должны использовать org.apache.camel.springboot в качестве groupId вместо org.apache.camel и т. Д. Все подробности можно увидеть в руководстве по миграции .

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

12) БОНУС: НОВЫЕ КОМПОНЕНТЫ

В Camel 3 добавлено 30 новых сетевых компонентов, таких как дополнительные компоненты для Amazon AWS и GraphQL, а также стоит упомянуть интеграцию с Debezium, проектом сбора данных об изменениях, позволяющим захватывать события изменений из баз данных.

Опубликовано на Java Code Geeks с разрешения Клауса Ибсена, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Apache Camel 3 — Что нового Top 10

Мнения, высказанные участниками Java Code Geeks, являются их собственными.