camel apache
Apache Camel 3于2019年11月28日星期四发布,也正是美国感恩节这一天。 这不是故意的,但我们可以向社区提供了一个全新的主要版本的Camel,这是我们的极大感谢–这并不经常发生。 实际上,距离骆驼2上街已经10年了。 因此,第三代早就该了。
![](https://i-blog.csdnimg.cn/blog_migrate/d9000b5adc10c52b80393fd237d0c231.png)
这篇博客文章重点介绍了骆驼v3中值得注意的新功能和改进。
1)骆驼现在是一个项目家族
Apache Camel现在是一个项目系列(在撰写本文时为3):
- Camel 3 :整合框架瑞士整合之刀
- Camel K :Kubernetes和Knative上的轻量级无服务器集成平台Camel
- Camel Quarkus :用于Quarkus优化的JVM和本机编译Java(GraalVM)的Camel扩展
![](https://i-blog.csdnimg.cn/blog_migrate/b4ba77d19c623523cbf5c434e5c6feac.png)
Camel代码库非常大,我们为使用Camel的新创新项目设置了子项目。 第一个子项目是以无服务器方式在Kubernetes上将Camel作为云原生运行,从而成为CamelK。然后Camel Quarkus开始以非常快速的启动和非常小的内存占用量来生产Java和Camel,主要用于基于容器的部署。
2)新网站
Camel 3的主要目标是最终改造旧的老化网站,以使用现代技术,并能够从源代码自动生成内容。 到目前为止,我们已经花费了很多年的时间,因为我们已经在最近的许多Camel 2.x版本中构建了工具,可以使我们更加接近。 在2019年底,骆驼社区和其他人加紧为新网站提供了新的艺术品,徽标以及外观和风格-非常感谢!
![](https://i-blog.csdnimg.cn/blog_migrate/31ec9d614e2d25634b20b90f6bc86e9f.png)
对于Camel 3.x,我们将继续改进网站和文档。 这对于我们来说更容易实现,对于人们来说也可以做出更改,因为它只是常规的GitHub PR来提供更新。 我们热爱贡献。
佐兰(Zoran)的新外观和感觉很有趣,他添加了一些宝石。 如果您凝视首页,那么应该会看到弧形边框的动画;)
3)JAVA 11
Camel 3是第一个支持Java 11的正式版本。第一个3.x版本仍将支持Java 8,但预计将在2020年晚些时候发布。但是,我们希望提供Java 8支持以帮助迁移Camel。可能会在一段时间内限制使用Java 8的2.x用户。
4)模块化的驼色核心
骆驼核心已从1 JAR模块化到33 JAR。 核心功能已拆分为:
camel-api
camel-base
camel-caffeine-lrucache
对于骆驼最终用户,则仅涉及几个JAR。
camel-api包含用于Camel的公共API(例如CamelContext,Endpoint,Exchange,Message等接口)。
camel-support包含用于构建Camel路由和应用程序的基类和RouteBuilder。 此JAR还包含用于构建自定义Camel组件和其他类型插件的必要基类。
骆驼核心中的组件也已被外部化为单个组件:
camel-bean
camel-log
camel-stub
然后,骆驼最终用户可以只选择他们需要的东西,或者继续使用所有东西。
因此,我们将camel-core和camel-core-engine作为两个初始依赖项。 您可以使用camel-core,它提供与Camel 2.x类似的所有JAR。 当您使用骆驼核心引擎时,您将获得构成功能骆驼的最少JAR集。
![](https://i-blog.csdnimg.cn/blog_migrate/3fdf82f511601e7dac7b8c104b8da25e.png)
camel-core包含33个JAR,以及
camel-core-engine包含12个JAR。
5)更快的启动和更低的足迹
我们减少了核心骆驼的大小和加载的类的数量。 例如,在骆驼2中加载了大约5200个类,而在骆驼3中已减少到大约4300个类。
我们还在核心中进行了许多较小的优化,以减少分配的Java对象的数量以及speeup初始化和其他方式。 我们已经使用JVM性能分析工具来协助和发现瓶颈。
改进的另一个方面是减少Java反射。 在Camel 2中,所有Camel组件,端点和路径的配置都是基于反射的。 在Camel 3中,我们有源代码生成的Java代码用于配置,它允许我们使用直接Java调用而不是反射。
另一个相似的领域是Camel的类型转换器,它在Camel 2中基于Java反射(您可以构建不基于反射的自定义类型转换)。 在Camel 3中,我们还生成Java源代码,这意味着类型转换是运行时的直接Java调用。
如果可能,我们还将初始化逻辑移到了较早的阶段。 例如,有一个新的构建阶段,它允许Camel在构建项目期间进行特殊的初始化(这需要Camel Quarkus)。
所有这些优化提高了Camel的启动性能并减少了内存开销。 使用Camel Quarkus,您可以在本地编译Camel应用程序,使其在30毫秒内启动,并拥有完整的HTTP REST服务器以及运行状况检查和指标,仅消耗10mb的内存(RSS)。
![](https://i-blog.csdnimg.cn/blog_migrate/f1ecd0b8a6d77aa5128b22e97012769b.png)
我们还需要在Camel 3.x中处理一些议程,以进一步优化Camel核心。
6)类型安全端点DSL
当您在端点中配置错误时,使用URI字符串配置端点的Camel最终用户都将遇到此问题,这将导致Camel启动失败。
在Camel 3中,我们为端点提供了新的类型安全DSL,您可以在Java路由中使用它。 您可以继续使用传统的URI字符串,但是如果您想尝试端点DSL,则需要将camel-endpointdsl添加到类路径中。 然后,您应该扩展EndpointRouteBuilder而不是RouteBuilder来访问端点DSL。
这是一个不带端点DSL的基本示例:
来自(“ timer:click?period = 3000&fixedRate = true”)
.to(“ seda:foo?blockWhenFull = true”);
from(timer(“ click”)。period(3000).fixedRate(true))
.to(seda(“ foo”)。blockWhenFull(true));
您还可以在源代码中找到一个小例子 。
7)主动路由引擎
Camel中的路由引擎已在内部进行了响应式配置,并且所有EIP都经过了改装以响应式方式工作。 但是,这仅是内部的,面向最终用户和组件开发人员的Camel API均基于现有的回调行为。
在我们跳到最低版本的Java 11(然后我们可以支持Java 9 flowable API)之后,我们将在稍后介绍和研究面向客户端的React式API。
Camel已经在专用的Camel组件中与诸如Vert.X,RxJava和Reactor Core的React框架集成。
8)骆驼主
我们引入了骆驼-main作为独立的JAR,这使得仅运行Camel更加容易。 有一些源代码示例演示了如何执行此操作。
我们还使用camel-main来提供通用代码来配置和引导Camel,以用于独立,Spring Boot,Camel K和Camel Quarkus。 这使我们可以共享相同的代码和配置选项。
9)骆驼微外形
Camel 3现在可以更好地与Eclipse Microprofile集成在一起,并且我们具有用于Microprofile配置,指标,运行状况检查和容错能力的Camel组件。
即将发布的Camel版本中将包含更多组件。 这些微轮廓组件也被Camel Quarkus使用。
10)其他改进
Camel 3现在支持JUnit 5进行单元测试,其测试组件的后缀为-junit5。
Camel Registry现在也是可写的,因此您可以在运行时或通过单元测试等将bean添加到注册表中。
您还可以将端点(生产者)配置为延迟启动。 默认情况下,骆驼在故障快速模式下工作,这意味着在启动过程中无法连接到外部系统的骆驼组件可能会导致路由在启动时失败。 对于Camel 3,您现在可以将这些端点配置为延迟启动,这意味着路由将启动,并且在将消息路由到端点时它们将首先失败。
Camel还允许将您的路由配置为在启动过程中受到监管,从而允许Camel通过重新启动失败的路由,以更安全的方式更智能地启动路由。
11)迁移至骆驼3
我们当然已经清理了代码库,例如删除了所有不赞成使用的API和组件。 我们还调整了一些API,使最终用户更易于使用它们,并且对Java 8 lambda更加友好。
在内部,我们还调整了路由模型,以使其更易于扩展到新的DSL。 并且在Camel K中启动了YAML DSL。
从向后兼容性的角度来看,Camel 3主要是与常规Camel应用程序兼容。 但是,如果您在Camel中使用某些更高级的功能和其他插件,则需要迁移。 此外,必须迁移和重新编译自定义组件。 还有其他调整,例如Spring Boot用户必须使用org.apache.camel.springboot作为groupId而不是org.apache.camel等。所有详细信息都可以在迁移指南中看到。
如果您决定继续进行骆驼之旅,那么祝您迁移顺利。 对于刚加入骆驼的新用户,祝您好运。
12)奖金:新组件
Camel 3中有30个净新组件,例如用于Amazon AWS和GraphQL的更多组件,还值得一提的是与Debezium的集成,Debezium是一个更改数据捕获项目,用于从数据库中获取更改事件。
翻译自: https://www.javacodegeeks.com/2019/12/apache-camel-3-whats-new-top-10.html
camel apache