日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行

發布時間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

紅帽公司最近發布了一個微服務集成工具包,用于在OpenShift v3的Docker和Kubernetes環境中運行我們的微服務。 為了幫助人們更好地理解這一點,我將Rider Auto應用程序遷移到一組微服務中,該應用程序已經存在了一段時間,該應用程序用于演示Apache Camel和JBoss Fuse,可以通過Docker容器在OpenShift / Kubernetes上運行。 該博客詳細介紹了一些背景知識,并指出了針對非平凡應用程序的“操作方法”的特定示例。 我還將制作一組視頻來演示此操作,因此,請關注此博客( http://blog.christianposta.com )進行更新,或者在Twitter @christianposta上關注我。

什么是用于OpenShift的保險絲集成服務(FIS)?

FIS是來自fabric8.io上游社區的一組開發人員工具和Docker映像,用于打包和部署我們的應用程序,該應用程序遵循微服務架構以及圍繞應用程序部署,版本控制和生命周期管理的最佳實踐,適合模型。 FIS是OpenShift上的Fuse的Red Hat支持的選項。

部署Fuse Integration Services的兩種主要方法是通過Fuse傳統上使用的基于OSGI的Karaf方法以及一種更簡單的平面類加載器選項,該選項從簡單的舊Java main引導Camel。 這兩個選項都打包并作為Docker容器交付。 兩者都是不錯的選擇,具體取決于您的工作,因此讓我們看一下。

駱駝靴

Camel Boot是一個JVM引導程序選項,它使我們可以使用maven項目使用的相同類路徑來打包應用程序,并使用Plain Old Java Main來啟動Apache Camel集成。 這種方法具有許多優點,可以簡化構建,組裝,分發和運行我們的微服務。 最重要的是,我們不必猜測我們的應用程序行為是基于復雜的類加載器的層次結構或圖形,還是我們是否包含了正確的元數據和依賴項,因此類可能無法解析/碰撞/覆蓋/覆蓋/動態加載/等等。 。 我們可以通過僅使用單個平面類加載器來簡化模型,從而不僅在Dev中而且在整個應用程序生命周期中(例如,在IST,UAT,PM,PROD等)中更輕松地推理應用程序。

由于此選項并不打算部署在任何應用程序服務器(Java EE應用程序服務器,Servlet容器,OSGI容器等)中,因此我們將依靠我們的應用程序來提供“恰到好處”的功能,否則您將在應用服務器-諸如HTTP,JMS,持久性等內容。因此,您可以在我們的應用中嵌入Jetty或Undertow服務器以獲取REST或SOAP端點的HTTP服務,并可以嵌入Spring-JMS和ActiveMQ庫之類的JMS客戶端以獲取消息客戶。 由于所有這些依賴項都作為應用程序的一部分包含在內,并且可以獨立于任何應用程序服務器啟動,停止,重新部署等,因此這也使對應用程序進行單元測試變得更加容易。

我建議在大多數用例中使用此Camel Boot選項,在這些用例中,您已經分解了應用程序并對其進行了模塊化,并且需要分別運行,調整,擴展和推理它們。 但是,在某些情況下,將服務并置在一起是必要的,并且只要應用程序的類路徑不會變得太復雜(即相互依賴的依賴關系),Camel Boot應該是一個不錯的選擇。 如果由于內聚的,位于同一位置的服務而使微服務變得復雜,請考慮使用Apache Karaf的下一個選項,該選項可讓您精細地控制類加載器的行為并在單個應用程序/ JVM進程中隔離模塊和API。

“不變”的Apache Karaf

Fuse Integration Services還提供了用于部署到基于Apache Karaf的JVM的選項,盡管該模型略有不同,因為我們遵循“不可變”部署的Docker模型。 在將應用程序熱部署/重新部署到正在運行的JVM或從中撤出應用程序之后,很難推斷出JVM的狀態。 實際上,由于JVM在運行時的這種“動態”可變性,您可能會遇到令人討厭的,難以識別的JVM泄漏 (尤其是在生產中是個壞主意)。 FIS鼓勵的模型是“用舊版本替換舊版本”之一(并依靠集群管理器通過滾動升級或藍綠色部署等為您精心安排 )

這對于FIS的Apache Karaf意味著什么? 不建議在運行時動態加載和卸載包或更改配置值以更改應用程序狀態。 相反,我們鼓勵可預測的啟動順序,理解的配置值以及將預烘焙的應用程序移植到JVM中。 如果需要更改,那么您將通過應用程序交付管道來更改/構建/測試/部署新版本(理想情況下是通過CI / CD流程),就像上述Camel-Boot選項一樣。 因此,對于Karaf for FIS,您的應用程序及其所有依賴項在構建時就打包,安裝,解析并構建到一個Karaf程序集中 ,這是Karaf的自定義發行版,其中包含您的應用程序。 部署時無需再猜測OSGI元數據和類解析; 如果事情無法解決,它們都是預先計算的,并且在構建時會快速失敗。 如果構建成功,您將對OSGI應用程序更有信心。

盡管大多數情況下建議使用Camel Boot選項,但對于OpenShift / Kubernetes / Docker之外的現有JBoss Fuse部署,此基于Karaf的選項可能是將現有Fuse工作負載遷移到此模型的最佳選擇(并利用CI / CD ,服務發現,集群管理等-已內置在OpenShift中)。 同樣,如果您將許多服務并置在一起,最終污染了一個平面類路徑,則不變的Karaf選項非常適合提供更精細的類路徑隔離和API /模塊化建模。

部署到Kubernetes / OpenShift

要部署到OpenShift,我們需要執行以下操作:

  • 打包我們的JVM(駱駝引導或不可變的karaf)
  • 構建我們的Docker容器
  • 生成并應用我們的OpenShift / Kubernetes配置

包裝駱駝靴應用

要打包我們的Camel Boot應用程序,我們所需要做的就是包含一個maven <build/>插件,該插件可以為我們處理所有這些事情。

<plugin><groupId>io.fabric8</groupId><artifactId>hawt-app-maven-plugin</artifactId><version>${fabric8.version}</version><executions><execution><id>hawt-app</id><goals><goal>build</goal></goals><configuration><javaMainClass>org.apache.camel.spring.Main</javaMainClass></configuration></execution></executions> </plugin>

在上述hawt-app-maven-plugin配置中,我們可以看到我們只指定了一個簡單的舊Java Main,它將駱駝引導到依賴項注入上下文或您的選擇(Spring,CDI等)中,并發現您的所有Spring / CDI資源,以及發現和啟動您的駱駝路線。 可以使用的Main.java文件的不同類型是:

  • org.apache.camel.spring.Main –發現您的Spring上下文文件(默認位置META-INF / spring / *。xml
  • org.apache.camel.cdi.Main –加載CDI容器和Camel路由bean
  • org.apache.camel.main.Main –沒有依賴項注入容器; 默認的SimpleRegistry實現
  • org.apache.camel.spring.javaconfig.Main –使用Java配置的Spring配置
  • org.apache.camel.guice.Main – Guice依賴注入容器

可能也值得將exec-maven-plugin到pom.xml ,以便您可以嘗試并通過上述Java Main嘗試進行引導:

<plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>1.4.0</version><configuration><mainClass>org.apache.camel.spring.Main</mainClass></configuration> </plugin>

然后,如果您鍵入mvn exec:java您將獲得與與hawt-app-maven-plugin打包的應用程序相同的行為,該應用程序保留了我們獨立Camel Boot微服務的Maven類路徑的順序和行為。

在進行Maven構建時,您應該在zip / tar.gz文件中看到打包了其Maven依賴項的應用程序。 如果您解壓縮該文件,則會有一個bin/run.sh文件,可用于啟動您的駱駝微服務。

要將其轉換為Docker映像,請將以下docker-maven-plugin到pom.xml

<plugin><groupId>org.jolokia</groupId><artifactId>docker-maven-plugin</artifactId><version>${docker.maven.plugin.version}</version><configuration><images><image><name>our-company/app-name:1.0</name><build><from>jboss-fuse-6/fis-java-openshift:1.0</from><assembly><basedir>/deployments</basedir><descriptorRef>hawt-app</descriptorRef></assembly><env><JAVA_LIB_DIR>/deployments/lib</JAVA_LIB_DIR><JAVA_MAIN_CLASS>org.apache.camel.spring.Main</JAVA_MAIN_CLASS></env></build></image></images></configuration> </plugin>

有關設置和運行它的更多詳細說明,請參閱Rider Auto OpenShift文檔。

打包不可變的Karaf應用

如果您使用的是基于Karaf的微服務,我們將遵循與Camel Boot類似的路徑。 通過將插件添加到我們的maven構建中,我們將使用karaf-maven-plugin將Karaf應用打包到一個不變的Karaf程序karaf-maven-plugin :

<plugin><groupId>org.apache.karaf.tooling</groupId><artifactId>karaf-maven-plugin</artifactId><version>${karaf.plugin.version}</version><extensions>true</extensions><executions><execution><id>karaf-assembly</id><goals><goal>assembly</goal></goals><phase>install</phase></execution><execution><id>karaf-archive</id><goals><goal>archive</goal></goals><phase>install</phase></execution></executions><configuration><karafVersion>v24</karafVersion><javase>1.8</javase><useReferenceUrls>true</useReferenceUrls><!-- do not include build output directory --><includeBuildOutputDirectory>false</includeBuildOutputDirectory><!-- no startupFeatures --><startupFeatures><feature>karaf-framework</feature><feature>shell</feature><feature>jaas</feature><feature>spring</feature><feature>camel-spring</feature><feature>camel-jaxb</feature><feature>camel-cxf</feature><feature>camel-bindy</feature><feature>cxf-http-jetty</feature><feature>activemq-client</feature><feature>activemq-camel</feature></startupFeatures><startupBundles><!-- this needs to be here for spring-dm to resolve properly!!--><bundle>mvn:org.apache.karaf.bundle/org.apache.karaf.bundle.core/3.0.4</bundle><bundle>mvn:io.fabric8.mq/mq-client/2.2.0.redhat-079</bundle><bundle>mvn:io.fabric8/fabric8-utils/2.2.0.redhat-079</bundle><bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle></startupBundles></configuration> </plugin>

請注意,上面的示例使用我們的微服務模塊/ API構建了Karaf的完整發行版,并將所有依賴項烘焙到發行版中。 您可以在配置中看到,我們可以精確控制要預發布到發行版中的功能,包,JRE等。

還應使用docker-maven-plugin為該模塊構建Docker映像。 再次,查看Rider Auto OpenShift文檔以獲取完整的,正在運行的示例。

生成OpenShift / Kubernetes組件清單

目前,FIS有兩個用于生成OpenShift / Kubernetes清單文件的選項(json / yaml –盡管目前僅支持JSON選項。在上游社區中,我們也支持yaml選項)。 要生成復制控制器/ Pods /服務,我們需要添加fabric8-maven-plugin和一些maven <properties/> :

<plugin><groupId>io.fabric8</groupId><artifactId>fabric8-maven-plugin</artifactId><version>${fabric8.version}</version><executions><execution><id>json</id><phase>generate-resources</phase><goals><goal>json</goal></goals></execution><execution><id>attach</id><phase>package</phase><goals><goal>attach</goal></goals></execution></executions> </plugin><fabric8.service.name>${project.artifactId}</fabric8.service.name><fabric8.service.headless>true</fabric8.service.headless><fabric8.metrics.scrape>true</fabric8.metrics.scrape><fabric8.metrics.port>9779</fabric8.metrics.port><docker.port.container.soap>8183</docker.port.container.soap><fabric8.service.name>${project.artifactId}</fabric8.service.name><fabric8.service.port>80</fabric8.service.port><fabric8.service.containerPort>8183</fabric8.service.containerPort>

使用這些pom.xml條目,我們可以執行mvn fabric8:json并生成kubernetes.json文件到target/classes/kubernetes.json 。

我們還可以使用類型安全的DSL來增強或生成kubernetes.json文件,從而生成更高級的Kubernetes清單對象,例如PersistentVolumes,Secrets,多種服務等。 有關一些示例和說明,請參見rider-auto-file模塊。

Rider Auto微服務回購中展示的功能

請查看Rider Auto項目,以了解有關這些功能的更多詳細信息:

  • 使用fabric8 maven插件生成kubrenetes.json文件
  • 使用類型安全的DSL將PersistentVolumes添加到kubernetes.json文件
  • 構建駱駝啟動應用
  • 構建不可變的Karaf應用
  • 在kubernetes環境中發現JBoss AMQ
  • 為Camel Boot和不可變的Karaf構建Docker映像
  • 將應用程序部署到OpenShift
  • 如何將多個kubernets.json文件合并到一個kubernetes.json文件中以進行“多合一”部署
  • 連接到本地/遠程Docker守護程序/ openshift安裝
  • 通過Kubernetes Services公開SOAP和REST HTTP服務
  • 在Karaf中使用Spring
  • Kubernetes與fabric8-arquillian的集成測試

翻譯自: https://www.javacodegeeks.com/2016/02/cloud-native-camel-riding-jboss-fuse-openshift.html

總結

以上是生活随笔為你收集整理的使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。