camel_Apache Camel 3.7(LTS)发布–有史以来最快的Camel

Apache Camel 3.7作为长期支持版本发布,带来了预编译语言、性能显著提升和核心优化。新版本中,预编译的简单语言(csimple)和jOOR语言提高了执行效率,降低了CPU使用率。此外,骆驼核心的优化减少了内存使用和提高了启动速度,部分组件支持自动装配。新组件如camel-vertx-kafka和camel-datasonnet也引入了更多功能。
摘要由CSDN通过智能技术生成
camel

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.5Camel 3.6的新功能的博客文章,您可能需要阅读以涵盖两个LTS版本之间的所有新闻。

发行说明

您可以在发行说明中找到有关此发行版的更多信息,并在发行版中解决JIRA票证的列表。

翻译自: https://www.javacodegeeks.com/2020/12/apache-camel-3-7-lts-released-the-fastest-camel-ever.html

camel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值