Apache Camel 2.16 发布

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

Apache Camel 2.16 于上周五发布。

这篇博客文章是我尝试做的这个新版本的前 10(+ 1 作为奖励)亮点。

1.动态到

很可能来自 Camel 用户的 最常见 问题是,我如何将消息发送到端点,其中 uri 应该使用我的消息中的动态值,例如标题。

在此版本之前,答案将是收件人列表 EIP。

但是为了使这更容易,我们在 DSL 中引入了一个动态,它使用简单的语言来计算动态计算的端点 uri,并将消息发送到该单个端点。对于更高级的用例,答案仍然是收件人列表,因为它可以并行发送到多个端点,并进行聚合等等。

所以 常见问题解答中的示例。

.to("freemarker: //templateHome/${body.templateName}.ftl")

收件人列表的解决方案是:

.recipientList(simple("freemarker: //templateHome/${body.templateName}.ftl"))

现在可以使用 toD 轻松完成:

.toD("freemarker: //templateHome/${body.templateName}.ftl")

我们故意将 to 和 toD 分开。因为前者允许 Camel 优化,因为它知道它是静态端点,而后者是动态的。

其他一些 EIP(例如 WireTap)和 rest-dsl 也支持动态 to。

2. Enrich 和 PollEnrich 现在支持动态端点

由于 toD 的新动态,它在能够将其引入 Content Enricher EIP 以进行丰富和 pollEnrich 方面取得了进展。多年来,这一直是人们的普遍需求,但最初计划作为 Camel 3.0 的更改。通过支持 URI 中的简单语言,这与 toD 的工作方式相同。

一个小例子:

from("direct:start") .enrich().simple("http:myserver/${header.orderId}/order") .to("direct:result");
请注意我们如何使用 ${header.orderId} 引用标头。

3. 包罗万象的组件文档

在此版本中我们有 199 个组件(有些是变体,例如 ftp sftp 等)。对于您可以在组件或端点上配置的每个选项,现在都使用 javadoc 进行了记录。

然后在构建过程中提取该文档,使其在运行时可用,您可以使用 Java API、JMX 或 Camel 命令 访问它。

我们还开始了标记(认为是标签/徽章)每个选项的过程,这样您就可以看到该选项是否适用于消费者、生产者、安全性、高级等。这是一个持续的过程,但我们已经为具有最多选项的组件完成了此过程。

这是我们在 Camel 2.12 中开始的努力的延续。之前的 Camel 2.15 版本有很多文档, 我已经在博客上提到过 。在 Camel 2.16 中,我们现在拥有 100% 的文档覆盖率,并且我们在构建期间启用了验证检查,如果缺少文档的选项将失败。

有了这个功能,像 hawtio 这样的工具可以美化 UI 来展示你的 Camel 应用程序的信息,如下所示:

hawtio 在运行时端点属性中显示其配置方式。选项分组在选项卡中。
4.更深层次的JMX统计

我们对所有 EIP 进行了大修,以提供更多有关 EIP 的运行时统计信息。例如,基于内容的路由器现在允许列出所有谓词,并细分这些谓词中使用最多的谓词。负载均衡器 EIP 还公开统计信息,例如它们的当前状态、最常触发的异常等等。这适用于所有不同的 EIP。另外EIP的配置也暴露了。

我们还设法让您的自定义 Camel 组件或 Java Beans 将它们的自定义 JMX 属性和操作与 Camel 的标准属性/操作集混合在一起成为可能。在那之前是不可能的,只有你的可用。我 以前在博客上写过这个

5.传入和传出端点

我们现在跟踪端点注册表中的所有传入和传出端点。可以从 Java、JMX 和 Camel 命令访问注册表。注册表还跟踪每个端点的使用频率,因此您可以知道哪些端点使用最多。

之前已经写过关于 此的博客,并录制了一段视频来演示这一点。

6. 纯 Java 中的 Swagger 2.0

swagger 组件已作为新的 camel-swagger-java 模块移植到 Java,并升级到 swagger 2.0 规范。我们还将 camel-swagger-java 集成到 rest-dsl,并能够使用选定的 HTTP 组件。因此,如果您将 jetty 与 rest-dsl 一起使用,那么 swagger 模块可以重用它来通过 HTTP 公开 api 文档。基于 Scala 的旧模块已弃用,只能使用 servlet 公开 api 文档。

之前已经写过关于 此的博客,并录制了一段视频。

7. rest-dsl 改进

您现在可以为 rest 服务的参数映射、查询参数、路径、正文等配置文档。

您可以从 Apache Camel 中附带的 一个小示例 中找到更多详细信息。

8. 脚本 DSL

我们 在 DSL 中引入了专用脚本 ,允许在路由期间执行脚本,默认情况下不会修改您的消息。我们发现很多用户想要这样做,但是使用语言组件有点痛苦,记得设置 transform=false。使用脚本 DSL,它在路由中脱颖而出。

运行一些 groovy 脚本的一个小例子:

<route> <fromuri="file://inbox"/> <script> <groovy>// some groovy code goes here</groovy> </script> <beanRefref="myServiceBean" method="processLine"/></route >

9. 启用参数绑定后,Camel 代理更易于使用

如果您使用 Camel 代理将中间件隐藏在接口后面,那么在调用接口上的方法时,现在会预先执行参数绑定。我们发现这更直观,并且允许从消息正文/标头等映射到这些参数,就像您对 bean 组件所做的那样。

Camel 代理 中查看更多详细信息。

10. 其他一些很棒的新东西

文件使用者现在支持使用幂等的读取锁定模式。这允许安全地让集群文件消费者为相同的文件竞争共享文件系统,以确保由选择的幂等存储库控制的独占读取锁定,例如使用 hazelcast。

我们还提供 Maven 原型,用于使用 spring-boot 和 cdi 创建微服务风格。

聚合器支持预完成模式,该模式允许传入消息完成先前的组并以其自身作为第一条消息开始一个新组。

11.更多组件

有 12 个新组件和 3 种新数据格式。

  • camel-paho - 使用 Eclipse Paho 客户端进行 MQTT 消息传递
  • camel-pdf - 用于创建 PDF 文档
  • camel-grape - 允许您在 CamelContext 运行时获取、加载和管理其他 jar。
  • camel-slack - 允许您连接到 Slack 的实例,并通过预先建立的 Slack 传入 webhook 传递包含在消息正文中的消息。
  • camel-jolt - 用于 JSON 到 JSON 的转换
  • camel-aws-ec2 - 为 Amazon Web Services EC2 提供支持的组件
  • camel-undertow - 使用 Undertow 作为 HTTP 服务器或客户端。
  • camel-git - 一个通用的 Git 组件
  • camel-sjms - SJMS Batch 是一个专门的组件,用于从 JMS 队列中进行高性能、事务性批处理消费
  • camel-http-common - 在我们拥有的所有各种 HTTP 组件中重用的通用基础组件。
  • camel-swagger-java - 一个纯 Java 的 Swagger 组件。
  • camel-elsql - 使用 ElSql 定义 SQL 查询的扩展 SQL 组件
  • camel-jbpm - 通过 kie-remote-client API 向 jBPM 发送消息。

例如,有一个通用的 git 组件,一个用于输出 PDF 文档的 pdf 组件,以及一个新的批处理 JMS 组件,它允许批处理 X 条 JMS 消息并将它们聚合成一条消息,所有这些都在事务边界内。

有关此版本中更改的详细列表,请参阅 Camel 2.16 发行说明 。当您从旧的 Camel 版本升级时,请务必阅读 升级部分时要考虑的重要更改

相关文章