Camel 3.1中添加的一项功能是能够更快地加载XML路由。 这是我们使Camel变得更小,更快的整体工作的一部分。
您可能会说ewww XML。 但坦率地说,有很多Camel用户使用XML定义路由来构建应用程序。 在Camel 2.x中,您将不得不使用Spring或OSGi Blueprint进行XML路由,而这两种路由在现代云原生世界中都变得越来越重要。
在Camel 3中,我们有一个名为Camel的独立模式Camel-main。 我们使用camel-main作为引导和配置Camel的通用方法,以用于独立的,camel-k,camel-quarkus以及大部分的camel-spring-boot。 这样可以确保在这些运行时中获得统一一致的开发人员体验。
好的,这可能是另一个博客帖子深入探讨骆驼主程序的主题,它是快速运行的绝佳运行时……只是骆驼。
因此,我想在此博客文章中说的是,我们使加载XML路由变得更快,开销更少。 在Camel 2.x中,对于Spring XML和Blueprint XML,它们依赖于JAXP和JAXB,它们很重。
因此,我们对Camel 3.1所做的工作是基于Camel DSL的源代码生成XML解析器。 这意味着我们对DSL所做的任何更改都会重新生成解析器。 解析器仅使用标准Java,因此没有其他第三方库依赖项。
为了在Camel中加载XML路由,下面的JAR中现在有2个解析器
– camel-xml-jaxb (基于Camel 2.x的传统JAXB)
– camel-xml-io (新的快速,轻量级源代码生成的解析器)
示例骆驼-example-main-xml被设置为使用新的解析器。 但是您可以自己尝试,并通过更改JAR依赖项切换到jaxb解析器。
让我们看一些数字(请注意,这只是在笔记本电脑上使用2个XML解析器运行此示例的快速测试)。
camel-xml-jaxb:从以下路径中加载了1条( 808毫秒 )额外的Camel XML路由:
camel-xml-io:从以下地址加载了1条( 76毫秒 )其他Camel XML路由:route / *。xml
因此,新的解析器的速度提高了约10倍(76与808毫秒)。
通过对JVM进行性能分析,我们可以看到加载的类也更少:4734 vs3892。此外,JAXB在JVM中留下了更多的对象和类,这些对象和类可能会很容易被垃圾回收,也可能不会很容易被垃圾回收。在解析过程中使用更多的CPU和内存。
然后在GraalVM上,新的解析器将更快,因为您可以避免在类路径上使用整个JAXB和JAXP API及其实现,并且避免GraalVM编译器崩溃和编译。 说到GraalVM,我们将在即将到来的Camel 3.2中进行一些重大改进,这些改进将有助于减小图像大小和编译,并允许执行更多的死代码消除操作,而这又使Camel更加出色。 这是另一篇博客文章的另一个主题,请继续关注。
翻译自: https://www.javacodegeeks.com/2020/03/apache-camel-3-1-fast-loading-of-xml-routes.html