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

apache.camel

昨天我们发布了Apache Camel K 1.0,并在社交媒体和Camel网站上宣布了该版本。

那么,骆驼K是什么,为什么你要在乎呢? 这是一个很好的问题,我想通过提及伟大的思想来帮助回答这个问题。

Hugo Guerrero发表了以下推文

这是Hugo的有力声明,他着重介绍了Camel K的突破性创新,该创新为开发人员提供了构建基于Java的服务的工具和手段,这些服务既无服务器又有功能,并使用标准Kubernetes构建块运行。

骆驼K是过去十年来Apache骆驼中最大的创新。 因此,将咖啡或茶装满杯子,然后坐下来享受接下来的10分钟阅读。

我请尼古拉·费拉罗(Camel K的共同创始人)发言,他使我得以从昨天的公告中重新发布他的博客文章。

自成立以来,Apache Camel K取得了很大的进步,我们现在很自豪地宣布1.0版本。 在过去的几个月中,我们一直在努力为Camel K添加更多很棒的功能,同时也提高了稳定性和性能。 这篇文章包含了一些有趣的东西,您可以在1.0 GA版本中找到它们。

首先,如果您生活在岩石下,这是您第一次听说骆驼K,

您可以在此处阅读一些介绍性博客文章( 1-介绍Camel K )( 2-knative上的骆驼k ),或查看Apache Camel网站,其中包含Camel K部分 ,其中包含大量从Github存储库自动生成的材料

用户体验

Camel K的开发风格非常简单:您只需使用集成路径编写一个文件,即可立即在任何Kubernetes集群上运行它们。 这种定义事物的方式在许多FaaS平台上很常见(尽管Camel K不是合适的FaaS平台,而是轻量级的集成平台),并且在技术上很难为开发人员提供IDE支持,例如代码完成和其他实用程序。

但是现在我们拥有了。 集成工具团队为VS Code创建了一些很酷的扩展,这些扩展使Camel K的开发经验更加令人兴奋。

您无需记住Camel DSL语法,IDE会为您提供建议和错误突出显示。

代码完成功能适用于Java代码,但不仅限于此:编写Camel URI和属性文件时,您还可以立即使用建议和文档。

而且,您还有许多选项可以运行集成并与之交互,所有这些都集成在IDE中。

只需安装VS Code Extension Pack for Apache Camel即可使用所有这些功能。

入门教程

好的工具是拥有Camel K良好开发经验的基础,但是随后您需要学习使用如此强大的功能可以做什么。

我们在Apache组织中创建了一个新的存储库,用于托管入门示例: camel-k-examples存储库。

到目前为止,我们已经添加了指导您完成操作的指南:

– 01基础 :学习Camel K的基础知识和一些有趣的用例

– 02无服务器API :如何设计无服务器(即自动缩放,缩放为零)API并在几分钟内运行

基本的快速入门也可以在线获得 ,因此您可以查看骆驼k的工作原理, 而无需在笔记本电脑上安装任何东西

预计在接下来的几个月中将会有更多的教程。 如果您想通过贡献自己的力量来帮助我们,也欢迎您。 它们基于VSCode Didact项目,该项目提供了

很棒的用户体验。

如果您正在寻找仅可以使用CLI挑选并运行的Camel K代码示例,则Camel K主存储库的examples目录包含许多示例 。 您也可以直接从Github运行它们:

kamel运行https://raw.githubusercontent.com/apache/camel-k/master/examples/Sample.java

您可以找到用不同语言编写的现成示例(例如
XML , JavaScript等)。

无服务器

无服务器是最重要的领域,我们将重点放在Apache Camel K的新开发上,尽管您应该记住,即使没有无服务器功能,您也可以拥有出色的Camel K体验。 要在Camel K中启用无服务器配置文件,您只需要安装Knative 。

在最新版本中,我们增加了对Knative最新进展的支持,例如Camel K与Knative事件代理很好地集成在一起,您可以轻松地从中生成或使用事件。

使用2行代码,您可以将事件(例如,由IoT设备生成的事件)从MQTT代理传输到网格:

桥梁

来自('paho:mytopic?brokerUrl = tcp:// broker-address:1883&clientId = knative-bridge')

.to('knative:event / device-event')

别开玩笑,您只需要在文件中编写这两行代码,然后使用kamel run bridge.groovy运行它,即可将数据推送到Knative代理中。

您还可以向外扩展Integration(Integration是Kubernetes的自定义资源,kubectl可以获取集成以查看所有集成)

以获得更高的吞吐量。 这里的扩展是手动的,因为事件的源是MQTT代理(但是我们计划在这种情况下也进行自动扩展

当您想对某些Knative事件做出React时,Camel K嵌入式自动缩放功能非常有效:

侦听器

from('knative:event / device-event')

.to('http:// myhost / webhook / random-id')

该集成配置为接收所有带有“ type = device-event”类型的事件,并随负载自动扩展,因为它已具体化为Knative Serving Service,并通过触发器自动订阅了Eventing Broker 。

然后,当您的IoT设备产生某些东西时,它将收到一个CloudEvent ;如果没有数据,它会缩小为零。 您只需要创建它(就像以前一样,只需kamel运行listener.groovy),其余所有配置都由Camel K操作员自动完成。

我们添加了更多功能,以更好地与Knative生态系统集成,并且还修复了以前版本中存在的一些兼容性和性能问题。 现在,用户体验更加流畅。

如果您是Knative YAML开发人员(!),则可以直接使用Knative版本中的Knative Camel Sources ,而不是直接使用CamelK 。 它们是Camel K集成的包装,与Knative开发人员使用的所有工具(例如kn CLI或OpenShift无服务器控制台)兼容。

Knative中的源只能将数据推送到各个Knative端点中,而不能反过来(即,它们不能用于将数据从Knative发布到外部)。 在Camel K中,您没有此限制:Route是Camel集成的基本组成部分,您可以使用它进行任何操作。

快速启动和低内存

我们不能说我们没有服务器,而没有提到我们在改善Camel K集成性能方面所做的工作。

从Camel 3.3.0(这是Camel K 1.0.0使用的默认版本)开始,您可以受益于直接在Camel核心中进行的所有改进,以使其更加轻巧。 可以在以下博客系列中找到有关Camel核心改进的更多详细信息,这些博客系列重点介绍了3.x Camel时间轴中为减少内存占用和加快启动时间而进行的更改,这是在无服务器环境中运行集成时的基础:
第1部分 , 第2 部分 , 第3 部分 , 第4部分 。

但是,改进不仅限于Camel核心:我们还有很多工作要做。 几个月前,我们开始了一个名为Camel Quarkus的Apache Camel的新子项目,目的是在Quarkus框架之上无缝地运行集成。 如您所知,Quarkus能够减少Java应用程序的内存占用并缩短启动时间,因为它将很多启动逻辑移到了构建阶段。 Quarkus应用程序也可以编译为本机二进制文件,从而极大地提高了启动性能并降低了内存占用。

在Camel K 1.0.0中,我们在JVM模式下支持Camel Quarkus。 我们的目标是在下一个发行版中尽快提供集群内本机编译(对于某些DSL语言,例如YAML)!

要将Quarkus用作基础运行时,只需启用
运行集成时的Quarkus特性 :

kamel运行myintegration.groovy -t quarkus.enabled = true

预期Quarkus将在下一发行版中成为默认的基础运行时,并且将不赞成并删除对Standalone模式(通过camel-main)的支持。 这意味着您不需要在下一版本中手动启用Quarkus,但仍需要在1.0中启用它。

快速建立时间

Kubernetes上运行的每个应用程序都需要打包在一个容器映像中,但是在Camel K中,您仅提供集成DSL,并且操作员会执行它所需的操作,包括直接在集群中构建映像。

操作员管理着一个可重复使用的容器映像池,如果您重新部署集成代码,它的确会尝试重用池中的现有映像,而不是在每次更改时都新建一个映像,因为创建新映像需要一些时间。 一开始是一分钟...

但是Kubernetes的发展速度如此之快,以至于您无法一次解决一个问题而忘却它,您需要不断地加以解决。 碰巧,我们在“香草Kube”中进行构建时使用的某些第三方依赖项的性能已缓慢下降,直至严重影响Camel K用户体验的程度。

我们决定在构建系统上加倍努力,以大幅度改善(再次!)Camel K集成的构建阶段。

现在可以在Minikube等开发环境中以秒为单位测量构建时间。 大部分时间都是一秒钟。 这不仅仅是简单的改进!

更好的CLI

“ kamel” CLI是我们提供给开发人员以运行集成的主要工具。 这不是强制性要求:最后,集成是Kubernetes的自定义资源,您可以使用任何Kubernetes标准工具(例如kubectl)对其进行管理。 但是,kamel CLI为集成开发人员增加了很多价值。

例如,如果您是Camel Java开发人员,记住要实例化Camel路由构建器而必须编写的样板并不是一件容易的事。 现在您不必记住这一点:

kamel初始化Handler.java

您将获得一个Java文件,其中包含为您编写的所有样板文件,而您只需要编写集成路径即可。

它还可以与所有其他语言一起使用:Groovy,XML,YAML,Kotlin和JavaScript。

例如,您可以编写:

kamel初始化foo.js

这样,您将获得一个用JavaScript编写的简单路由。

不只是那样 通常Camel K开发人员需要添加许多命令行选项来配置其集成的最终行为。 例如,您可能想使用-d选项添加自定义库,或使用-t配置特征。 例如:

kamel run -d mvn:org.my:lib:1.0.0 -d mvn:org.my:otherlib:2.0.0 -t quarkus.enabled = true Handler.java

有时,您必须添加的命令行参数数量可能会过多。 因此,我们增加了在集成文件中将它们指定为模型选项的可能性(通过添加带有`camel-k:`作为前缀的注释行来完成)。

Handler.java

// camel-k:依赖关系= mvn:org.my:lib:1.0.0依赖关系= mvn:org.my:otherlib:2.0.0 trait = quarkus.enabled = true

//…

//您的路线

将选项写入文件后,您可以使用以下命令运行路由:

//简单地说,就是从文件中读取其他args

kamel运行Handler.java

其他选项是从文件模型自动获取的。 CLI还显示完整命令,以让您知道正在运行什么。

这种配置在CI / CD场景中非常有用,因为它允许您拥有独立的集成文件,并且无需更改管道即可设置其他选项。 如果您对CI / CD配置感到好奇,可以遵循有关Tekton管道的教程以获取更多信息。

监控和追踪

好的,您已经完成了Camel K开发的第1级,并且您想做些严肃的事情。 您处于非常好的位置,因为Camel K提供了许多有用的工具来增加您的集成途径的可视性。

假设您在名称空间中有一个Prometheus实例,并且想要发布集成指标:

kamel运行Routes.java -t prometheus.enabled = true

而已。 无需设置服务标签即可启用抓取。 还为集成提供了默认的prometheus配置文件,并带有合理的默认值。 当然,您也可以选择为高级用例提供自己的配置 。

现在,让我们假设您想看看您的路由在做什么,并跟踪集成的执行流程。 您需要做的是在命名空间(例如Jaeger )中安装与opentracing兼容的应用程序,然后按以下方式运行集成:

kamel运行Routes.java -t prometheus.enabled = true -t tracing.enabled = true

就是这样。 Camel K运算符将添加camel-opentracing库并将其连接到命名空间中可用的Jaeger收集器。 同样,这里支持高级用例 。

主路线

骆驼的老用户知道为什么主路由有用,何时使用主路由,但是对于那些不熟悉该术语的人,我将提供一个简短的解释。

只要您有一个集成路由必须在任何时间最多在一个Camel实例中运行,就需要使用主路由。 主路由可以通过简单地在消费者端点前面加上'master'关键字和一个用于创建命名锁的名称来声明,例如

来自('master:mylock:telegram:bots')

.to('log:info')

它可以用于打印发送到Telegram bot的所有消息。 由于Telegram API仅支持单个使用者,因此您可以使用主前缀来保护路由,以确保在任何给定时间最多只有一个使用者。

如果您想知道如何在一个实例中运行两个实例,那么想一想,当您更改代码并需要进行滚动更新时:一段时间内,会有两个Pod并行运行。 在某些情况下,您可能决定扩展服务范围,但在服务的所有Pod中仅保留特定路由的一个实例。 或者,您可能希望将主路由嵌入Knative自动缩放服务中:在这种情况下,该服务可以根据负载进行自动缩放,但任何时候都只有一个电报使用者。

主路由在Camel K中是开箱即用的,您只需要在端点uri中添加前缀即可。 将自动为您配置基于Kubernetes API资源锁的领导者选举协议!

CronJobs

所有足够复杂的系统都包含几个计划的作业。 对于系统中与外部集成的那部分尤其如此。

理想情况下,如果需要执行快速的周期性任务(例如,每两秒执行一次),则可以通过基于计时器的路由启动集成以执行周期性任务。 例如

来自(“ timer:task?period = 2000”)

.to(此为“ businessLogic”)

但是,如果两次执行之间的时间间隔是2分钟(“ 120000”)或2小时(“ 7200000”),而不是2秒(骆驼URI中的“ 2000”,以毫秒为单位)?

您会看到,保持一个运行JVM的容器执行应该每两分钟执行一次的任务可能是过大的(肯定是在2小时内过大了)。 我们生活在内存和CPU等资源非常宝贵的时代。

因此,Camel K操作员可以通过将您的集成部署为Kubernetes CronJob而不是Kubernetes部署来自动处理这种情况。 这样可以节省大量资源,尤其是在两次执行之间的时间间隔较长时。 当需要运行集成代码时,容器将启动,触发执行,然后正常终止。 一切由Camel K和Kubernetes自动处理。

在某些情况下,您不希望启用此功能,例如,当您的代码使用内存缓存时,最好在两次执行之间保持同步。 在这种情况下,可以通过将标志-t cron.enabled = false传递给kamel run命令来安全地关闭该功能。

Cron功能不仅适用于`timer`组件。 从Camel 3.1开始,我们还添加了一个cron组件 ,与cron特质结合使用时效果非常好。

因此,您也可以直接在路由中编写cron表达式:

来自(“ cron:job?schedule = 0/5 + * + * + * +?”)

.to(此为“ businessLogic”)

在这种情况下,每5分钟启动一个带有JVM的新容器以执行计划的任务。 在剩下的4分钟以上时间内,您不会使用任何资源。

透明度

当您在集群中运行集成代码时,Camel K会为您完成很多工作,并且您可能在代码中放置了一些错误,这些错误会阻止部署过程。 我们在部署过程中增加了很多可见性,现在可以通过使用CLI时在控制台上打印的Kubernetes事件与用户进行通信。

这样一来,您总是会收到有关代码中问题的通知,并且您可以更好地了解要解决的问题以使集成运行。

如何尝试Camel K 1.0

第一步是转到Apache Camel K发布页面 ,下载适用于您的OS的kamel CLI,并将其放在系统路径中。

通常使用`kamel install`命令完成安装,但是,根据所使用的Kubernetes集群的类型,您可能需要执行其他配置步骤。

Camel K文档包含有关在各种类型的Kubernetes集群上安装它的部分。

如果您遇到问题或需要将其安装在未列出的特定群集上,只需与Gitter聊天联系 ,我们将尽最大努力为您提供帮助。

未来

我们已经达到了1.0.0版,这对我们来说是一个伟大的里程碑。 但是我们现在不会停下来:我们为未来制定了宏伟的计划,并且我们将继续开发出色的新功能。

我们需要您的帮助来改善骆驼K,我们热爱贡献!

加入我们:

– Gitter: https : //gitter.im/apache/camel-k

– GitHub: https : //github.com/apache/camel-k

翻译自: https://www.javacodegeeks.com/2020/06/apache-camel-k-1-0-is-here-why-should-you-care.html

apache.camel

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

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

相关文章

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…

spring(4)面向切面的Spring(AOP)

【0】README1)本文部分文字描述转自:“Spring In Action(中/英文版)”,旨在review “spring(4)面向切面的Spring(AOP)”的相关知识;2)在软件开发中,散布于应…

Mybatis-plus 思维导图,让 Mybatis-plus 不再难懂

转载自 Mybatis-plus 思维导图,让 Mybatis-plus 不再难懂 摘要: Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。mybatis-plus与mybatis mybatis Mybat…

报错:The type javax.servlet.http.HttpServletRequest cannot be resolved

【0】README 0.1)以下内容转自: http://blog.csdn.net/vincent080928/article/details/5392891 problem)The type javax.servlet.http.HttpServletRequest cannot be resolved. It is indirectly referenced from required .class files. 这…

MyBatis 思维导图,让 MyBatis 不再难懂(一)

转载自 MyBatis 思维导图,让 MyBatis 不再难懂(一)写在前面与hibernate相比,我无疑更喜欢mybatis,就因为我觉得它真的好用,哈哈。它简单上手和掌握;sql语句和代码分开,方便统一管理和…

tomcat(20)基于JMX的管理

【0】README1)本文部分文字描述转自:“深入剖析tomcat”,旨在学习“tomcat(20)基于JMX的管理” 的相关知识;2)晚辈我在tomcat上部署web 项目以测试JMX管理 tomcat 容器bean的效果,结果运行不成功&#xff0…