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
總結
以上是生活随笔為你收集整理的apache.camel_Apache Camel K 1.0在这里–您为什么要关心的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英伟达AI峰会10月15日至16日举行
- 下一篇: restful和rest_HATEOAS