Docker容器中的WildFly Swarm JAX-RS微服务
這些天,每個人都在談論微服務。 關于如何在企業(yè)級應用這些原則,有很多意見和想法,而很少有示例。 可以肯定的是,即使在幾天前的會議上,我也很少發(fā)現(xiàn)有人在生產(chǎn)環(huán)境中運行Docker容器。 當我問起初次體驗以及是否有人玩過時,至少舉起了合理的手。 并查看運行容器化基礎結構所需的所有操作級別知識(操作系統(tǒng),網(wǎng)絡等),我可以理解所有這些。 要使Enterprise Java開發(fā)人員更容易做到,必須做很多事情。 實際上,我們可以使用一些方法來使用日常工具,并將它們與最新技術結合起來以進行自我教育。 其中之一是WildFly Swarm,它是一種輕量級且簡便的方法來構建完全包含的Java EE應用程序。 這篇博客文章將向您展示如何在Docker上本地運行它。
什么是WildFly Swarm?
WildFly是一款輕巧,靈活,功能豐富且符合Java EE 7的應用程序服務器。 WildFly 9甚至引入了僅27MB的Servlet發(fā)行版 。 兩者都是Java Enterprise項目的堅實基礎。 最新版本的WildFly 10.CR2將成為Red Hat的下一個受支持的Java EE服務器產(chǎn)品Enterprise Application Platform 7的基礎。
WildFly Swarm擺脫了各種概要文件的靜態(tài)捆綁,使您可以構建自己的定制功能Java EE運行時。 但是,WildFly Swarm不僅涉及定制的應用程序服務器,而且還涉及到定制的應用程序服務器。 它是關于將包含相關應用程序服務器組件的應用程序捆綁在一個可執(zhí)行文件中。 這也稱為“ fat-jar”,可以簡單地使用java -jar運行。 當我們談論它時:微服務通常將完整的應用程序及其堆棧帶入其中,因此您可以將每個WildFly Swarm應用程序視為一個獨立且完全包含的微服務。
將Java EE應用程序變成胖子
通過添加Maven依賴項和插件,可以將Java EE應用程序打包為WildFly Swarm胖子罐。 可以從https://github.com/myfear/WildFlySwarmDockerSample/獲得該簡單JAX-RS示例的完整源代碼。 該應用程序本身公開了一個端點/ rs / customer,該端點僅輸出一些文本。 真正的魔力被放入pom.xml文件中。 我們現(xiàn)在正在經(jīng)歷。
首先, 對Java EE 7 API的依賴關系 ,然后是
<dependency><groupId>org.wildfly.swarm</groupId><artifactId>wildfly-swarm-jaxrs</artifactId><version>${version.wildfly-swarm}</version></dependency>WildFly Swarm插件負責應用程序的打包:
<plugin><groupId>org.wildfly.swarm</groupId><artifactId>wildfly-swarm-plugin</artifactId><version>${version.wildfly-swarm}</version><executions><execution><goals><goal>package</goal></goals></execution></executions></plugin>這就是所有魔術。 您可以使用“ mvn軟件包”來構建應用程序。 您將在目標文件夾中找到war文件本身以及一個附加附件“ swarm-sample-1.0-SNAPSHOT-swarm.jar”。 如果打開該文件夾,則可以找到一個m2repo文件夾,其中包含所有從屬庫,并且您的應用程序本身捆綁在_bootstrap \文件夾中。 您可以從maven項目中的命令行直接運行它(Windows用戶可能會遇到此問題 ):
java -jar target/swarm-1.0-SNAPSHOT-swarm.jar將瀏覽器重定向到http:// localhost:8080 / rs / customer將向您顯示一些json
{"text":"WildFly Swarm Docker Application on OpenShift at http://192.168.99.100:32773/rs/ - Hostname: 093ca3279a43"}Docker化WildFly Swarm
WildFly Swarm項目在github上有一些Docker示例。 大多數(shù)情況下,bash腳本和一些包裝器可以對您的項目進行docker化。 但是還有更好的東西:Roland Huss的Docker Maven插件 。 我之前已經(jīng)使用過幾次,并且在本示例中也使用了它。 您所要做的就是將插件添加到pom.xml中 。
<plugin><groupId>org.jolokia</groupId><artifactId>docker-maven-plugin</artifactId><version>${docker.maven.plugin.version}</version> </plugin>配置有點棘手。 (感謝Roland在過去幾天給我的所有電子郵件支持!)。 首先,基礎很簡單。 將圖像添加到插件配置中,并相應地命名。 我繼承自jboss / jdk-base:8,圖像獲得名稱并標記為myfear / swarm-sample:latest( 第77ff行 )。 構建配置公開端口8080并定義相關入口點 (使用-jar參數(shù)啟動java的命令)。 圖像的組裝需要包括項目附件 ,并將附件作為依賴項 。 確保輸出服務映射和basedir與入口點參數(shù)匹配。
讓我們對其進行測試
確保您的主機上具有docker-machine設置。 創(chuàng)建一個開發(fā)機器并相應地配置環(huán)境變量。 現(xiàn)在您可以運行:
mvn clean install docker:build docker:start -Ddocker.follow( 注: 10.3.5 Docker Maven插件中的錯誤實際上現(xiàn)在無法立即提取基本映像。您需要在執(zhí)行maven運行之前手動執(zhí)行'docker pull jboss / jdk-base:8'。)
將構建該項目,并從映像啟動一個容器。
恭喜,您現(xiàn)在在本地Docker實例中有一個正在運行的Java EE微服務。 下一個博客實際上將研究如何獲取此圖像并將其在OpenShift Origin上運行并根據(jù)您的需求進行縮放。
翻譯自: https://www.javacodegeeks.com/2015/10/a-wildfly-swarm-jax-rs-microservice-in-a-docker-container.html
總結
以上是生活随笔為你收集整理的Docker容器中的WildFly Swarm JAX-RS微服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI 识别能力超过人眼,仅凭照片,就能快
- 下一篇: spring 线程池_Spring线程池