Camel团队目前正在忙于Apache Camel 3的开发。已经完成了许多工作,到目前为止,我们已经发布了3个里程碑版本。 下一个里程碑版本4具有一些出色的创新功能,这些功能我将在接下来的几个月中发布。
该博客的主题是我们在将骆驼核拆分成较小的模块方面所做的工作,您现在可以轻松地仅选择所需的模块。
如果我们看一下骆驼核心JAR的依赖关系树,您会发现它已被分成许多模块,如下所示:
[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的迁移以及易于使用,我们将保持骆驼核心与Camel 2.x中的JAR依赖项相同。 因此,以上输出仅来自在您的Maven pom.xml文件或gradle构建文件中声明对camel-core的依赖。
但是,骆驼3里程碑4即将推出的功能是轻松选择所需的东西。 例如,下面显示了一个依赖关系树,其中我们只使用了尽可能少的树(使用新的camel-core-engine JAR作为依赖关系):
+- 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被排除在测试范围之外)
[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
如果我们比较两个示例(包括logger等)中JAR的大小,则有:
- camel-example-main(骆驼核心): 48个JAR文件,总计9.3 MB
- camel-example-main-tiny(骆驼核心引擎): 21个JAR文件,总计7.4 MB
如果我们运行两个示例,那么您还可以看到使用camel-core-engine时加载到JVM中的类的数量要少一些:
- camel-example-main(camel-core): 加载了3666个类
- camel-example-main-tiny(骆驼核心引擎): 加载了3430个类
好的,这里的减少不是那么明显,但是可以预期,因为Camel将延迟使用正在使用的组件,并且该示例仅使用bean和石英组件。 但是,类路径扫描会更快一些,因为磁盘大小大约减少了25%,JAR文件减少了50%。
Apache Camel 3还有很多其他很棒的东西,我将在今年夏天开始发布该博客之前发布博客(预计于2019年9月/ 10月发布)。
翻译自: https://www.javacodegeeks.com/2019/06/camel-core-camel-core-engine-smaller-core.html