jboss fuse 教程_使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行
jboss fuse 教程
紅帽公司最近發(fā)布了一個微服務(wù)集成工具包,用于在OpenShift v3的Docker和Kubernetes環(huán)境中運(yùn)行我們的微服務(wù)。 為了幫助人們更好地理解這一點,我將Rider Auto應(yīng)用程序遷移到一組微服務(wù)中,該應(yīng)用程序已經(jīng)存在了一段時間,該應(yīng)用程序用于演示Apache Camel和JBoss Fuse,可以通過Docker容器在OpenShift / Kubernetes上運(yùn)行。 該博客詳細(xì)介紹了一些背景知識,并指出了針對非平凡應(yīng)用程序的“操作方法”的特定示例。 我還將制作一組視頻來演示此操作,因此,請關(guān)注此博客( http://blog.christianposta.com )進(jìn)行更新,或者在Twitter @christianposta上關(guān)注我。
什么是用于OpenShift的保險絲集成服務(wù)(FIS)?
FIS是來自fabric8.io上游社區(qū)的一組開發(fā)人員工具和Docker映像,用于打包和部署我們的應(yīng)用程序,該應(yīng)用程序遵循微服務(wù)架構(gòu)以及圍繞應(yīng)用程序部署,版本控制和生命周期管理的最佳做法,從而適合模型。 FIS是OpenShift上的Fuse的Red Hat支持的選項。
部署Fuse Integration Services的兩種主要方法是通過Fuse傳統(tǒng)上使用的基于OSGI的Karaf方法以及一種更簡單的平面類加載器選項,該選項從簡單的舊Java main引導(dǎo)Camel。 這兩個選項都打包并作為Docker容器交付。 兩者都是不錯的選擇,具體取決于您的工作,因此讓我們來看一下。
駱駝靴
Camel Boot是JVM引導(dǎo)程序選項,它使我們可以使用maven項目使用的相同類路徑來打包應(yīng)用程序,并使用Plain Old Java Main來啟動Apache Camel集成。 這種方法具有許多優(yōu)點,可以簡化構(gòu)建,組裝,分發(fā)和運(yùn)行我們的微服務(wù)。 最重要的是,我們不必猜測我們的應(yīng)用程序行為是基于復(fù)雜的類加載器的層次結(jié)構(gòu)或圖形的,也不是我們是否包含了正確的元數(shù)據(jù)和依賴項,以便類可以解析或碰撞/覆蓋/覆蓋/動態(tài)加載/等等。 。 我們可以通過僅使用一個單一的平面類加載器來簡化模型,從而不僅在Dev中而且在整個應(yīng)用程序生命周期(例如IST,UAT,PM,PROD等)中都更容易推理應(yīng)用程序。
由于此選項并不打算部署在任何應(yīng)用程序服務(wù)器(Java EE應(yīng)用程序服務(wù)器,Servlet容器,OSGI容器等)中,因此我們將依靠我們的應(yīng)用程序來提供“恰到好處”的功能,否則您將在應(yīng)用服務(wù)器-諸如HTTP,JMS,持久性等內(nèi)容。因此,您可以在我們的應(yīng)用中嵌入Jetty或Undertow服務(wù)器以獲取REST或SOAP端點的HTTP服務(wù),并可以嵌入Spring-JMS和ActiveMQ庫之類的JMS客戶端以獲取消息客戶。 由于所有這些依賴項都作為應(yīng)用程序的一部分包含在內(nèi),并且可以獨(dú)立于任何應(yīng)用程序服務(wù)器啟動,停止,重新部署等,因此這也使對應(yīng)用程序進(jìn)行單元測試變得更加容易。
我建議在大多數(shù)用例中使用Camel Boot選項,在這些用例中,您已經(jīng)分解了應(yīng)用程序并對其進(jìn)行了模塊化,并且需要分別運(yùn)行,調(diào)整,擴(kuò)展和推理它們。 但是,在某些情況下,將服務(wù)并置在一起是必要的,并且只要應(yīng)用程序類路徑不會變得太復(fù)雜(即相互依賴的依賴關(guān)系),Camel Boot應(yīng)該是一個不錯的選擇。 如果由于內(nèi)聚的,位于同一位置的服務(wù)而使微服務(wù)變得復(fù)雜,請考慮使用Apache Karaf的下一個選項,該選項可讓您精細(xì)地控制類加載器的行為并在單個app / JVM進(jìn)程中隔離模塊和API。
“不變”的Apache Karaf
Fuse Integration Services還提供了一個部署到基于Apache Karaf的JVM的選項,盡管該模型略有不同,因為我們遵循“不可變”部署的Docker模型。 在將應(yīng)用程序熱部署/重新部署到正在運(yùn)行的JVM中/從中撤出應(yīng)用程序之后,很難推斷出JVM的狀態(tài)。 實際上,由于JVM在運(yùn)行時的這種“動態(tài)”可變性,您可能會遇到令人討厭的,難以識別的JVM泄漏 (尤其是在生產(chǎn)中是個壞主意)。 FIS鼓勵的模型是“用舊版本替換舊版本”之一(并依靠集群管理器通過滾動升級或藍(lán)綠色部署等為您精心安排 )
這對于FIS的Apache Karaf意味著什么? 不建議在運(yùn)行時動態(tài)加載和卸載包或更改配置值以更改應(yīng)用程序狀態(tài)。 相反,我們鼓勵可預(yù)測的啟動順序,理解的配置值以及將預(yù)烘焙的應(yīng)用程序移植到JVM中。 如果需要更改,那么您將通過應(yīng)用程序交付管道來更改/構(gòu)建/測試/部署新版本(理想情況下是通過CI / CD流程),就像上述Camel-Boot選項一樣。 因此,對于Karaf for FIS,您的應(yīng)用程序及其所有依賴項在構(gòu)建時會打包,安裝,解析并構(gòu)建到一個Karaf程序集中 ,這是Karaf的自定義發(fā)行版,其中包含您的應(yīng)用程序。 部署時無需再猜測OSGI元數(shù)據(jù)和類解析; 如果事情無法解決,所有這些都是預(yù)先計算的,并且在構(gòu)建時會快速失敗。 如果構(gòu)建成功,您將對OSGI應(yīng)用程序更有信心。
盡管大多數(shù)情況下建議使用Camel Boot選項,但對于OpenShift / Kubernetes / Docker之外的現(xiàn)有JBoss Fuse部署,此基于Karaf的選項可能是將現(xiàn)有Fuse工作負(fù)載遷移到此模型的最佳選擇(并利用CI / CD ,服務(wù)發(fā)現(xiàn),集群管理等-已內(nèi)置在OpenShift中)。 同樣,如果您要同時放置許多最終污染平面類路徑的服務(wù),那么不變的Karaf選項非常適合提供更精細(xì)的類路徑隔離和API /模塊化建模。
部署到Kubernetes / OpenShift
要部署到OpenShift,我們需要執(zhí)行以下操作:
- 打包我們的JVM(駱駝引導(dǎo)或不可變的karaf)
- 構(gòu)建我們的Docker容器
- 生成并應(yīng)用我們的OpenShift / Kubernetes配置
包裝駱駝靴應(yīng)用
要打包我們的Camel Boot應(yīng)用程序,我們需要做的就是包括一個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,它將駱駝引導(dǎo)到依賴項注入上下文或您的選擇(Spring,CDI等)中,并發(fā)現(xiàn)您的所有Spring / CDI資源,以及發(fā)現(xiàn)和啟動您的駱駝路線。 可以使用的Main.java文件的不同類型是:
- org.apache.camel.spring.Main –發(fā)現(xiàn)您的Spring上下文文件(默認(rèn)位置META-INF / spring / *。xml
- org.apache.camel.cdi.Main –加載CDI容器和Camel路由bean
- org.apache.camel.main.Main –沒有依賴項注入容器; 默認(rèn)的SimpleRegistry實現(xiàn)
- org.apache.camel.spring.javaconfig.Main使用Java配置的Spring配置
- org.apache.camel.guice.Main – Guice依賴注入容器
可能還值得在您的pom.xml添加exec-maven-plugin ,以便您可以嘗試并通過上述Java Main嘗試進(jìn)行引導(dǎo):
<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打包的應(yīng)用程序相同的行為,該應(yīng)用程序保留了我們獨(dú)立Camel Boot微服務(wù)的Maven類路徑的順序和行為。
當(dāng)您進(jìn)行Maven構(gòu)建時,您應(yīng)該在zip / tar.gz文件中看到您的應(yīng)用與Maven依賴關(guān)系打包在一起。 如果您解壓縮該文件,則會有一個bin/run.sh文件,可用于啟動您的駱駝微服務(wù)。
要將其轉(zhuǎn)換為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>有關(guān)設(shè)置和運(yùn)行它的更多詳細(xì)說明,請參閱Rider Auto OpenShift文檔。
打包不可變的Karaf應(yīng)用
如果您正在執(zhí)行基于Karaf的微服務(wù),我們將遵循與Camel Boot類似的路徑。 通過將插件添加到我們的maven構(gòu)建中,我們將使用karaf-maven-plugin將我們的Karaf應(yīng)用打包到一個不變的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>請注意,上面的示例使用我們的微服務(wù)模塊/ API構(gòu)建了Karaf的完整發(fā)行版,并將所有依賴項烘焙到發(fā)行版中。 您可以在配置中看到,我們可以精確控制要預(yù)發(fā)布到發(fā)行版中的功能,包,JRE等。
還應(yīng)使用docker-maven-plugin為該模塊構(gòu)建Docker映像。 再次,查看Rider Auto OpenShift文檔以獲取完整的,正在運(yùn)行的示例。
生成OpenShift / Kubernetes組件清單
目前,FIS有兩個用于生成OpenShift / Kubernetes清單文件的選項(json / yaml –盡管目前僅支持JSON選項。在上游社區(qū)中,我們也支持yaml選項)。 要生成復(fù)制控制器/ Pods /服務(wù),我們需要添加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條目,我們可以執(zhí)行mvn fabric8:json并生成kubernetes.json文件到target/classes/kubernetes.json 。
我們還可以使用類型安全的DSL來增強(qiáng)或生成kubernetes.json文件,從而生成更高級的Kubernetes清單對象,例如PersistentVolumes,Secrets,多種服務(wù)等。 有關(guān)一些示例和說明,請參見rider-auto-file模塊。
Rider Auto微服務(wù)回購中展示的功能
請查看Rider Auto項目,以了解有關(guān)這些功能的更多詳細(xì)信息:
- 使用fabric8 maven插件生成kubrenetes.json文件
- 使用類型安全的DSL將PersistentVolumes添加到kubernetes.json文件
- 構(gòu)建Camel Boot應(yīng)用
- 構(gòu)建不可變的Karaf應(yīng)用
- 在kubernetes環(huán)境中發(fā)現(xiàn)JBoss AMQ
- 為Camel Boot和不可變的Karaf構(gòu)建Docker映像
- 將應(yīng)用程序部署到OpenShift
- 如何將多個kubernets.json文件合并到一個kubernetes.json文件中以進(jìn)行“多合一”部署
- 連接到本地/遠(yuǎn)程docker守護(hù)程序/ openshift安裝
- 通過Kubernetes Services公開SOAP和REST HTTP服務(wù)
- 在Karaf中使用Spring
- Kubernetes與fabric8-arquillian的集成測試
翻譯自: https://www.javacodegeeks.com/2016/02/cloud-native-camel-riding-jboss-fuse-openshift.html
jboss fuse 教程
總結(jié)
以上是生活随笔為你收集整理的jboss fuse 教程_使用JBoss Fuse和OpenShift进行Cloud Native Camel骑行的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 封神榜神仙表 封神榜神仙介绍
- 下一篇: junit 预期错误_谨慎使用JUnit