Статьи

Apache Camel 3 – верблюжий ядро ​​против верблюжьего ядра (меньшее ядро)

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

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

Если мы посмотрим на дерево зависимостей JAR-пакета Camel-Core, вы увидите, что оно разбито на множество модулей, как показано ниже:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[INFO] +- org.apache.camel:camel-core:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-base:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-jaxp:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-management-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-support:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-util:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-util-json:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-bean:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-browse:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-caffeine-lrucache:jar:3.0.0-SNAPSHOT:compile
[INFO] |  |  \- com.github.ben-manes.caffeine:caffeine:jar:2.7.0:compile
[INFO] |  |     +- org.checkerframework:checker-qual:jar:2.6.0:compile
[INFO] |  |     \- com.google.errorprone:error_prone_annotations:jar:2.3.3:compile
[INFO] |  +- org.apache.camel:camel-controlbus:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-dataformat:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-dataset:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-direct:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-directvm:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-file:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-language:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-log:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-mock:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-properties:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-ref:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-rest:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-saga:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-scheduler:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-seda:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-stub:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-timer:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-validator:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-vm:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-xpath:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-xslt:jar:3.0.0-SNAPSHOT:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.25:compile

В Camel 2.x все эти модули были включены в один и тот же JAR с верблюжьим ядром.

Чтобы сделать переход с Camel 2.x на 3.0, а также упростить его использование, мы оставим верблюд-ядро таким же набором зависимостей JAR, что и в Camel 2.x. Таким образом, вывод, приведенный выше, заключается в объявлении зависимости от верблюжьего ядра в файле Maven pom.xml или в файле сборки gradle.

Тем не менее, в Camel 3 Milestone 4 появится еще и простой способ выбрать то, что вам нужно. Например, ниже показано дерево зависимостей, в котором мы используем как можно меньше (используя в качестве зависимости новый JAR-файл camel-core-engine):

1
2
3
4
5
6
7
8
+- org.apache.camel:camel-core-engine:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  |  \- org.apache.camel:camel-util:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-management-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-support:jar:3.0.0-SNAPSHOT:compile
[INFO] |  \- org.apache.camel:camel-core:jar:3.0.0-SNAPSHOT:compile
[INFO] |     +- org.apache.camel:camel-base:jar:3.0.0-SNAPSHOT:compile
[INFO] |     \- org.apache.camel:camel-properties:jar:3.0.0-SNAPSHOT:compile

Чтобы проиллюстрировать это, мы предоставили 2 набора примеров

Первый использует ядро ​​верблюда в качестве зависимости, которая включает в себя все основные компоненты и т. Д. Второе – это крошечный набор зависимостей, который включает только то, что необходимо. В примере используются только компоненты bean и quartz2, поэтому вам необходимо добавить их в качестве зависимости:

Дерево зависимостей выглядит следующим образом (учтите, что JAXB исключен как область тестирования)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[INFO] --- maven-dependency-plugin:3.1.1:tree (default-cli) @ camel-example-main-tiny ---
[INFO] org.apache.camel.example:camel-example-main-tiny:jar:3.0.0-SNAPSHOT
[INFO] +- org.apache.camel:camel-core-engine:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  |  \- org.apache.camel:camel-util:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-management-api:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.apache.camel:camel-support:jar:3.0.0-SNAPSHOT:compile
[INFO] |  \- org.apache.camel:camel-core:jar:3.0.0-SNAPSHOT:compile
[INFO] |     +- org.apache.camel:camel-base:jar:3.0.0-SNAPSHOT:compile
[INFO] |     \- org.apache.camel:camel-properties:jar:3.0.0-SNAPSHOT:compile
[INFO] +- org.apache.camel:camel-main:jar:3.0.0-SNAPSHOT:compile
[INFO] +- org.apache.camel:camel-bean:jar:3.0.0-SNAPSHOT:compile
[INFO] +- org.apache.camel:camel-quartz2:jar:3.0.0-SNAPSHOT:compile
[INFO] |  +- org.quartz-scheduler:quartz:jar:2.3.1:compile
[INFO] |  |  +- com.mchange:mchange-commons-java:jar:0.2.15:compile
[INFO] |  |  \- com.zaxxer:HikariCP-java7:jar:2.4.13:compile
[INFO] |  \- com.mchange:c3p0:jar:0.9.5.4:compile
[INFO] +- com.sun.xml.bind:jaxb-core:jar:2.3.0:test
[INFO] +- com.sun.xml.bind:jaxb-impl:jar:2.3.0:test
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.11.2:runtime
[INFO] +- ch.qos.logback:logback-core:jar:1.2.3:compile
[INFO] \- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO]    \- org.slf4j:slf4j-api:jar:1.7.25:compile

Если мы сравним размер JAR-файлов между двумя примерами (включая регистратор и т. Д.), То получим:

  • camel-example-main (camel-core): 48 JAR-файлов общим объемом 9,3 МБ
  • camel-example-main-tiny (camel-core-engine): 21 файл JAR общим объемом 7,4 МБ

Если мы запустим два примера, то вы также увидите, что число классов, загружаемых в JVM, немного меньше при использовании camel-core-engine:

  • camel-example-main (camel-core): загружено 3666 классов
  • camel-example-main-tiny (camel-core-engine): загружено 3430 классов

Хорошо, сокращение здесь не так значительно, но ожидается, что Camel будет лениво загружать используемые компоненты, а в примере используются только компонент bean и кварц. Однако сканирование пути к классам будет немного быстрее, поскольку размер диска примерно на 25% меньше, а JAR-файлы – на 50%.

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

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

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