Apache Camel 2.16发布–十大亮点

Apache Camel 2.16于上周五发布。 这篇博客文章是我尝试在此新版本中进行前10名(加1作为奖励)的亮点。 2016年

1.动态到

来自骆驼用户的最常见的常见问题是如何将消息发送到端点,uri应该使用消息中的动态值(例如标头)。

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

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

因此,常见问题解答中的示例 :

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

收件人列表的解决方案在哪里:

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

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

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

在XML DSL中,您将使用:

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

在其他一些EIP(例如WireTap)和rest-dsl中也支持dynamic to。

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

由于toD的新动态,它为将其引入到Content Enricher EIP中以实现rich和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在运行时端点属性中显示了其配置方式。选项分组在选项卡中。

hawtio在运行时端点属性中显示了其配置方式。 选项分组在选项卡中。

4.更深入的JMX统计信息

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

我们还设法使您的自定义Camel组件或Java Bean混入其自定义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的改进

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

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

8.脚本DSL

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

运行一些groovy脚本的小例子

<route><from uri="file://inbox"/><script><groovy>// some groovy code goes here</groovy></script><beanRef ref="myServiceBean" method="processLine"/></route>

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

如果使用Camel代理将中间件隐藏在接口后面,则在调用接口上的方法时,现在可以预先执行参数绑定。 我们发现这更直观,并且可以像使用Bean组件一样从消息正文/标题等映射到这些参数。

在Camel proxy上查看更多详细信息。

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版本进行升级时,请务必阅读升级要考虑重要更改部分。

翻译自: https://www.javacodegeeks.com/2015/10/apache-camel-2-16-released-top-10-highlights.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[原创软件]体验组批量加分工具

软件主要功能&#xff1a; 从excel批量导入用户QQ、昵称、年龄信息批量粘贴用户QQ或昵称进行筛选批量添加积分软件界面截图&#xff1a; 开发环境及语言&#xff1a; c#.NET Framework 4.0Visual Studio 2015更新日志&#xff1a; v1.2&#xff08;2016.9.30&#xff09; 增加格…

java 线性表的表示和实现_线性表中顺序表的的理解和实现(java)

线性表的顺序表示指的是用一组地址连续的存储单元以此存储线性表的数据元素&#xff0c;这种表示也称作线性表的顺序存储结构或顺序映像。通常&#xff0c;称这种存储结构的线性表为顺序表。特点是&#xff1a;逻辑上相邻的数据元素&#xff0c;其物理次序上也是相邻的。顺序表…

akka连接是什么_什么是Akka?

akka连接是什么在深入探讨什么是Akka之前&#xff0c;让我们退后一步来了解并发编程的概念在应用程序开发世界中是如何演变的。 应用程序已从大型的整体程序演变为面向对象的模型。 随着Java EE和Spring框架的出现&#xff0c;应用程序设计演变为更多的基于流程或任务的设计模型…

c java 系统开发_java开发系统内核:使用C语言开发系统应用程序

更详细的讲解和代码调试演示过程&#xff0c;请参看视频用java开发C语言编译器如果你对机器学习感兴趣&#xff0c;请参看一下链接&#xff1a;机器学习&#xff1a;神经网络导论我们的操作系统通过增添内核接口导出机制后&#xff0c;已经可以作为平台&#xff0c;运行应用程序…

抑制java对修饰符的检查_Java 7对抑制异常的支持

抑制java对修饰符的检查在JDK 7中 &#xff0c;向Throwable类&#xff08; Exception和Error类的父类&#xff09;添加了一个新的构造函数和两个新方法。 添加了新的构造函数和两个新方法以支持“抑制的异常”&#xff08;不要与吞咽或忽略异常的不良做法相混淆&#xff09;。 …

编写基于事件的CQRS读取模型

关于事件源和CQRS的讨论似乎通常集中在CQRS上下文中的整体系统架构或领域驱动设计的各种形式。 但是&#xff0c;尽管也有一些有趣的考虑&#xff0c;但读取模型经常被忽略。 在本文中&#xff0c;我们将展示一个通过使用事件流填充视图模型的示例实现。 总览 读取模型的想法…

java else if和switch_如何优雅地优化代码中的的if else和switch

引言一般来说&#xff0c;随着我们项目的迭代以及业务的越来越复杂&#xff0c;项目中的分支判断会原来越多。当项目中涉及到复杂的业务判断或者分支逻辑时&#xff0c;我们就需要考虑是否需要对项目进行重构了&#xff0c;或者if else和switch case是否能够满足当前项目的复杂…

jQuery data

一个简单的Cache (function(){var __cache {},Cache {get: function(__name){return __cache[__name] || undefined;}, set: function(__name, __value){return (__cache[__name] __value)}};this.Cache Cache; })();alert(Cache.get("name")); //undefine…

设计模式(中介者模式-对象去耦)

声明&#xff1a;本系列文章内容摘自《iOS设计模式》 中介者模式 用一个对象来封装一系列对象的交互方式。中介者使个对象不需要显式地相互调用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 何时使用中介者模式 1.对象间的交互虽定义明确然而非…

windows服务器的DDOS防御,

抵御 SYN 攻击 SYN 攻击利用了 TCP/IP 连接建立机制中的安全漏洞。要实施 SYN 洪水攻击&#xff0c;攻击者会使用程序发送大量 TCP SYN 请求来填满服务器上的挂起连接队列。这会禁止其他用户建立网络连接。 要保护网络抵御 SYN 攻击&#xff0c;请按照下面这些通用步骤操作&…

java程序运行结果题_2016年关于Java编程与程序运行结果笔试题

2016年关于Java编程与程序运行结果笔试题1.Java编程,打印昨天的当前时刻public class YesterdayCurrent{public void main(String[] args){Calendar cal Calendar.getInstance();cal.add(Calendar.DATE, -1);System.out.println(cal.getTime());}}2.文件读写,实现一个计数器pu…

Hystrix简介– Hello World

在先前的博客文章中&#xff0c;我谈到了需要像Netflix Hystrix这样的库的动机。 在这里&#xff0c;我将跳入一些非常基本的方法来开始使用Hystrix&#xff0c;并在更复杂的用例中进行后续介绍。 你好&#xff0c;世界 以下是“ Hystrix命令”的一个简单的Hello World示例&am…

js base64编码 java 解码_JavaScript字符串的Base64编码与解码

有时文本里包含一些不可打印的符号&#xff0c;而你需要把它们传输到服务器&#xff0c;这时我们会需要用到Base64编码。或者你需要把一个图片内容以文本格式嵌入到网页中&#xff0c;这时你也会用到 Base64 编码。所谓 Base64 是一种基于64个可打印字符来表示二进制数据的方法…

ssh图片上传 java_ssh上传并显示图片

struts部分&#xff1a;attribute"upfileForm"input"/upload/uploadfile.jsp"name"upfileForm"path"/upfile"scope"request"validate"true"type"com.yourcompany.struts.action.UpfileAction">publi…

责任链设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

使用JUnit规则进行干净的集成测试

JUnit Rules的优势&#xff0c;尤其是在进行集成测试时&#xff0c;几乎不能被高估。 在本文中&#xff0c;我们将阐明ExternalResource扩展的有用性。 在我们必须使用抽象外部资源的第三方库的情况下&#xff0c;这些简化了灯具控制。 作为示例&#xff0c;我们将看看如何基于…

winform基础窗体设置及基础控件

WinForm - 也叫做C/S 客户端 另&#xff1a;B/S是 网页端 客户端应用程序 - 是需要安装在用户电脑上才可以使用的程序 特点&#xff1a; 不需要联网也可以打开使用部分功能&#xff0c;但是现在的情况是许多功能依然需要互联网的支持&#xff0c;代码部分在用户电脑上执行 使用…

【FastJSON】解决FastJson中“$ref 循环引用”的问题

0、开发环境 SSH&#xff0c;EasyUI&#xff0c;MySQL 1、需求要求&#xff1a; (1)首先获取所有的贷款订单数据&#xff0c;即List <LoanOrder>。 (2)然后从单个贷款订单实体LoanOrder去访问贷款人实体Loaner的信息。 2、实体之间的关系描述 (1)LoanOrder实体与Loaner…

JavaFX真实世界应用程序:EIZO CuratOR Caliop

JavaFX Real-World应用程序第四号称为Caliop 。 它是EIZO为医院手术室开发的CuratOR解决方案的前端。 前端在壁挂式控制台上运行&#xff0c;并允许操作团队查找有关患者的信息&#xff0c;控制各种视频源到不同监视器的路由&#xff0c;录制视频&#xff0c;拍摄照片/剧照。 …

netbeans代码提示_NetBeans可用性提示

netbeans代码提示的Java IDE都来了&#xff0c;因为在很长的路要走天的JBuilder的 &#xff08;尽管JBuilder中似乎是一个值得欢迎提前在时间&#xff09;。 当今的Java IDE&#xff08;例如NetBeans &#xff0c; Eclipse &#xff0c; IntelliJ IDEA和JDeveloper &#xff09…