![camel](https://i-blog.csdnimg.cn/blog_migrate/3e930c4d042f1516c0c17dccfaaef022.png)
camel
Apache Camel 3.7是几天前发布的。
这是LTS版本,这意味着我们将提供一年的补丁程序版本。 下一个计划的LTS版本是3.10,计划于2021年夏季发布。
那么这个版本有什么
此版本引入了一组新功能和显着的改进,我们将在此博客文章中介绍。
预编译语言
我们继续努力使骆驼更快,更小。 这次,我们专注于内置的简单脚本语言。
首先,我们添加了jOOR语言。 jOOR是一个小型Java工具,用于在内存中执行Java源代码的运行时编译。 它有一些局限性,但通常适用于小型脚本代码(需要Java 11或更高版本)。
然后,我们进行了简单的编译。
编译简单
csimple语言被解析为常规Java源代码,并与所有其他源代码一起编译,或者在通过jOOR进行引导时编译一次。
简而言之,使用动态对象图导航语言(OGNL)方法调用时,编译后的简单语言优于简单语言。
例如,分析以下简单表达式
<simple> $ {exchangeProperty.user.getName}!= null && $ {exchangeProperty.user.getAge}> 11 </ simple>
具有等效的csimple表达式:
<csimple> $ {exchangeProperty.user}!=空&&
$ {exchangeProperty.user.getName()}!= null &&
$ {exchangeProperty.user.getAge()}> 11 </ csimple>
如屏幕截图所示,在降低cpu使用率的情况下,性能显着提高了100倍:
有关已编译的简单语言以及性能进一步下降的更多信息,请阅读我最近介绍csimple语言的博客文章。
我们提供了两个小示例,它们将csimple演示为在引导过程中进行预编译和运行时编译。
您可以从官方的Apache Camel示例库中找到以下两个示例:
优化核心
我们一直在努力优化骆驼芯。 这次在各个领域进行了一些较小的改进,例如在正则表达式过大的情况下用正则Java代码替换正则表达式(regexp占用了大量堆内存)。
直接组件已得到增强,以避免在生产者致电消费者时发生同步。
我们还增强了事件通知程序的内部,将启动/停止事件与路由事件分开,从而在路由过程中获得了较小的性能提升。
我们还减少了路由选择过程中使用的对象数量,从而减少了内存使用量。
另一个重大胜利是将内核中的所有类型转换器汇总为两类(由源生成)。 这样可以避免将每个类型转换器单独注册到类型转换器注册表中,这样可以节省20kb的堆内存。
如果您对我们如何进行这些优化并获得一些性能数据感到好奇,请阅读我最近的另一篇博客文章。
优化组件启动
骆驼核心已在Camel 3中进行了优化,以使其体积小,纤薄且启动快速。 这使Camel Quarkus受益匪浅, Camel Quarkus可以利用优化的骆驼核心进行内置时间优化。
我们在Camel组件中继续进行了这项工作,在启动过程中,只要有可能,初始化就会移至较早的阶段,从而可以增强构建时间。 由于存在大量的骆驼组件,因此这项工作将在接下来的两个骆驼版本中进行。
分离型号和EIP处理器
在此版本中,我们对模型,整流器和处理器进行了梳理。
这是一项了不起的成就,使我们能够在设计时间与运行时间之间取得更大的成就。
型号->整流器->处理器
(启动)(启动)(运行时)
该模型是DSL的结构,您可以将其视为指定骆驼路线的“设计时间”。 该模型在启动期间执行一次,并通过整流器(工厂)创建运行时EIP处理器。 完成这项工作后,基本上不再需要该模型。
通过将其分成不同的JAR(骆驼核心模型,骆驼核心reifier,骆驼核心处理器),我们确保将它们分开,这使我们能够更好地通过Quarkus和/或更好地进行内置时间优化和死代码消除GraalVM。
这将带来轻量级模式。
轻量模式
我们之前以轻量模式开始了一项实验。 随着模型与处理器的分离,我们向前迈出了一大步,这使我们能够为最终用户提供轻量级模式。
在轻量模式下,Camel在启动后会删除对模型的所有引用,这会使JVM能够垃圾收集所有模型对象并卸载类,从而释放内存。
此后,将无法再动态添加新的骆驼路线。 轻量级模式适用于具有封闭世界假设的微服务/无服务器架构。
自动装配组件
骆驼组件现在可以按类型自动布线。 例如,如果存在单个SqsClient实例,则AWS SQS组件可以在注册表中自动查找,然后对其进行预配置。
我们已经在Camel文档中标记了哪些组件选项通过在说明中以粗体显示Autowired来支持此功能。
Salesforce修复
我们最近的骆驼提交者杰里米·罗斯(Jeremy Ross)为改善和修复骆驼销售人员组件中的错误所做的出色工作。 我们希望他能带来更多。
VertX Kafka组件
使用Vert.X Kafka Java客户端开发了一个新的Kafka组件,它使我们能够使用其所有功能,以及其鲁棒性和稳定性。
camel-vertx-kafka组件旨在与现有的camel-kafka组件一起具有(更多)功能。 我们将在接下来的两个骆驼版本中继续这项工作。
数据网
新的camel-datasonnet组件将用于使用DataSonnet进行数据转换。
DataSonnet是一种开源的,以JSON为中心,基于模板的数据转换标准,旨在与市场上的专有选项相匹敌。
Sprint Boot
我们已经升级到Spring Boot 2.4。
新组件
此版本具有7个新组件,数据格式或语言:
- AtlasMap:使用[AtlasMap](https://www.atlasmap.io/)转换来转换消息
- Kubernetes自定义资源:在Kubernetes自定义资源上执行操作并获得有关部署更改的通知
- Vert.X Kafka:使用vert.x Kafka客户端向Apache Kafka代理发送和从其接收消息
- JSON JSON-B:将POJO编组为JSON,然后使用JSON-B返回
- CSimple:评估一种编译简单表达语言
- DataSonnet:在骆驼表达式或谓词中使用DataSonnet脚本
- jOOR:评估jOOR(在运行时编译一次Java)表达语言
升级中
如果要从以前的Camel版本升级到此版本,请务必阅读升级指南。
更多细节
先前的LTS版本是Camel 3.4。 我们有关于Camel 3.5和Camel 3.6的新功能的博客文章,您可能需要阅读以涵盖两个LTS版本之间的所有新闻。
发行说明
您可以在发行说明中找到有关此发行版的更多信息,并在发行版中解决JIRA票证的列表。
翻译自: https://www.javacodegeeks.com/2020/12/apache-camel-3-7-lts-released-the-fastest-camel-ever.html
camel