apache.camel_Apache Camel 3.1 – XML路由的快速加载

apache.camel

Camel 3.1中添加的一项功能是能够更快地加载XML路由。 这是我们为使Camel变得更小,更快而进行的总体工作的一部分。

您可能会说ewww XML。 但坦率地说,有很多Camel用户使用XML定义路由来构建应用程序。 在Camel 2.x中,您将不得不使用Spring或OSGi Blueprint来处理XML路由,这两种路由在现代云原生世界中都变得越来越重要。

在Camel 3中,我们有一个名为Camel-main的独立模式。 我们使用camel-main作为引导和配置Camel的通用方法,以用于独立的,camel-k,camel-quarkus以及大部分的camel-spring-boot。 这样可以确保在这些运行时中获得统一一致的开发人员体验。

好的,这可能是另一个博客帖子深入探讨骆驼主程序的主题,它是快速运行的绝佳运行时……只是骆驼。

因此,我想在此博客文章中说的是,我们使加载XML路由变得更快,开销更少。 在Camel 2.x中,对于Spring XML和Blueprint XML,它们依赖于JAXP和JAXB,它们很重。

因此,我们对Camel 3.1所做的工作是基于Camel DSL的源代码生成XML解析器。 这意味着我们对DSL所做的任何更改都会重新生成解析器。 解析器仅使用标准Java,因此没有其他第三方库依赖项。

为了在Camel中加载XML路由,下面的JAR中现在有2个解析器

camel-xml-jaxb (基于Camel 2.x的传统JAXB)

camel-xml-io (新的快速,轻量级源代码生成的解析器)

示例骆驼-example-main-xml设置为使用新的解析器。 但是您可以自己尝试,并通过更改JAR依赖项切换到jaxb解析器。

让我们看一些数字(请注意,这只是在笔记本电脑上使用2个XML解析器运行此示例的快速测试)。

camel-xml-jaxb:从以下地址加载了1条( 808毫秒 )额外的Camel XML路由:routes / *。xml

camel-xml-io:从以下地址加载了1条( 76毫秒 )额外的Camel XML路由:route / *。xml

因此,新解析器的速度提高了约10倍(76与808毫秒)。

通过对JVM进行性能分析,我们可以看到加载的类也更少了:4734 vs3892。此外,JAXB在JVM中留下了更多的对象和类,这些对象和类可能会很容易被垃圾回收,也可能不会很容易被垃圾回收。在解析过程中使用更多的CPU和内存。

然后在GraalVM上,新的解析器将更快,因为您可以避免在类路径上使用整个JAXB和JAXP API及其实现,并且避免GraalVM编译器崩溃和编译。 在谈到GraalVM时,我们正在对即将到来的Camel 3.2进行一些重大改进,这将有助于减小图像大小和编译,并允许执行更多的死代码消除操作,以及使Camel更加出色的功能。 那是另一篇博客文章的另一个主题,请继续关注。

翻译自: https://www.javacodegeeks.com/2020/03/apache-camel-3-1-fast-loading-of-xml-routes.html

apache.camel

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

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

相关文章

程序中 设置jvm 参数_高效应用程序的7个JVM参数

程序中 设置jvm 参数在撰写本文时(2020年3月),围绕垃圾收集和内存,您可以将600多个参数传递给JVM。 如果您包括其他方面,则JVM参数总数将很容易超过1000个。 😊。 任何人都无法消化和理解太多的论据。 在本…

tomcat(17)启动tomcat

【0】README 1)本文部分文字描述转自“how tomcat works”,旨在学习“tomcat(17)启动tomcat”的相关知识;2)本文重点关注启动Tomcat时会用到的两个类,分别是Catalina类和 Bootstrap类;(干货——…

八爪鱼 是java做的吗_章鱼扫描仪:Java构建工具和恶意软件

八爪鱼 是java做的吗Alvaro Munoz最近在GitHub Security Lab网站上发布了“ Octopus扫描程序恶意软件:攻击开源供应链 ”。 我发现这篇文章很有趣,原因有很多,其中包括对Octopus Scanner恶意软件的工作原理和发现方式的详细介绍, …

spring(1)Spring之旅

【0】README0.1)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在reviewSpring(1)Spring之旅 的相关知识;【1】简化java 开发1)为了降低java开发的复杂性,Spring采取了以…

apache.camel_Apache Camel K 1.0在这里–您为什么要关心

apache.camel昨天我们发布了Apache Camel K 1.0,并在社交媒体和Camel网站上宣布了该版本。 那么,骆驼K是什么,为什么你要在乎呢? 这是一个很好的问题,我想通过提及伟大的思想来帮助回答这个问题。 Hugo Guerrero发表…

DRF之初识

目录 一、序列化和反序列化 【1】序列化 【2】反序列化 【3】小结 二、DRF的安装和快速使用 (1) 安装DRF: (2) 配置DRF: (3) 创建序列化器(Serializer): (4) 创建视图(View): (5) 配置URL路由: 【补充】下载…

spring(2)装配Bean

【0】README0)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在review spring(2)装配Bean 的相关知识;1)在spring中,对象无需自己查找或创建与其所关联的其他对象。相反…

restful和rest_HATEOAS的RESTful服务:JVM上的REST API和超媒体

restful和rest1.简介 到目前为止,我们已经花了很多时间谈论了相当数量的关于角色的的超媒体和HATEOAS在REST风格的 Web服务和API,扫视不同规格和可用性方面。 听起来好像支持超媒体和HATEOAS并不难,只需选择您的收藏夹就可以了! …

Spring中配置数据源的4种形式

【0】README 0.1)以下内容转自:http://blog.csdn.net/orclight/article/details/8616103 不管采用何种持久化技术,都需要定义数据源。Spring中提供了4种不同形式的数据源配置方式: spring自带的数据源(DriverManagerDataSource)&…

MavenSelenium测试自动化教程

在进行自动化测试项目时,您需要与之关联的所有Selenium依赖项。 通常,这些依赖项是在项目生命周期中手动下载和升级的,但是随着项目规模的扩大,管理依赖项可能会非常困难。 这就是为什么需要构建自动化工具(例如Maven&…

命令行执行Junit测试

【0】README 0.1)本文旨在给出如何在命令行中执行 Junit测试的steps: 【1】在命令行中执行Junit测试 1)problemsolution: 1.1)problem: 1.2)solution:导出 JUnitCore 类并且使用 …

托管 非托管_如何在托管Kubernetes上还原Neo4J备份

托管 非托管在下面的视频中,我将解释如何将Neo4J实例的备份还原到在托管Kubernetes环境中运行的新实例。 备份内容将从先前写入备份的持久卷中获取。 在上一篇文章中,您可以首先了解如何进行备份。 自己尝试 同样,您将在以下GitHub存储库中…

spring(3)高级装配

【0】README0)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在review spring(3)高级装配 的相关知识;【1】环境与profile(考虑数据库配置)1)使用嵌入式数据…

jmc线程转储_查找线程转储中的异常和错误

jmc线程转储线程转储是解决生产问题/调试生产问题的重要工件。 在像过去我们已经讨论了几种有效的线程转储故障模式: 堵车 , 跑步机 , RSI , 一个 LL条条大路通罗马 .........。 在本文中,我们想介绍另一种线程转储故障…

命令模式的两种不同实现

转载自 命令模式(Command)的两种不同实现命令模式(Command):将一个请求封装成一个对象,使得你用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能…

tomcat(18)部署器

【0】README-1)先上干货:本文重点分析了tomcat 如何部署WAR文件的项目形式 以及 普通文件夹的项目形式;不管是WAR文件 还是 普通文件夹的项目形式,在tomcat中,它们都是Context容器;(Bingo&#…

装饰器模式和代理模式的区别

转载自 装饰器模式和代理模式的区别学习AOP时,教材上面都说使用的是动态代理,可是在印象中代理模式一直都是控制访问什么的,怎么又动态增加行为了,动态增加行为不是装饰器模式吗?于是找了很多资料,想弄清楚…

使用Java 8 Stream像操作SQL一样处理数据(上)

转载自 使用Java 8 Stream像操作SQL一样处理数据(上) 几乎每个Java应用都要创建和处理集合。集合对于很多编程任务来说是一个很基本的需求。举个例子,在银行交易系统中你需要创建一个集合来存储用户的交易请求,然后你需要遍历整个…

tomcat(19)Manager应用程序的servlet类

【0】README1)本文部分文字描述转自:“深入剖析tomcat”,旨在学习“tomcat(19)Manager应用程序的servlet类” 的相关知识;2)Manager应用程序用来管理已经部署的web 应用程序;在tomcat7中,manage…

使用Java 8 Stream像操作SQL一样处理数据(下)

转载自 使用Java 8 Stream像操作SQL一样处理数据(下) 在上一篇文章中,我们介绍了Stream可以像操作数据库一样来操作集合,但是我们没有介绍 flatMap 和 collect 操作。这两种操作对实现复杂的查询是非常有用的。比如你可以结果 fl…