北京網(wǎng)站優(yōu)化診斷網(wǎng)站推廣怎么推廣
【squids.cn】 全網(wǎng)zui低價RDS,免費的遷移工具DBMotion、數(shù)據(jù)庫備份工具DBTwin、SQL開發(fā)工具等
在本系列的第一部分,我們看到了一個簡化版的基于微服務(wù)的轉(zhuǎn)賬應(yīng)用程序,該應(yīng)用程序使用Apache Camel和AWS SDK(軟件開發(fā)套件)作為Java開發(fā)工具,使用Quarkus作為運行時平臺進(jìn)行實現(xiàn)。如前所述,為了運行此類應(yīng)用的生產(chǎn)版本,可能需要考慮許多部署情景;最初且最簡單的情景是以獨立方式在本地運行它。這也是我們在這篇新文章中將要探討的情景。
Quarkus能夠以兩種模式運行你的應(yīng)用程序:基于JVM(Java虛擬機(jī))的模式和原生模式?;贘VM的模式是運行Java應(yīng)用程序的標(biāo)準(zhǔn)傳統(tǒng)方式。在這種情況下,運行的應(yīng)用程序不是直接對操作系統(tǒng)執(zhí)行,而是在某種執(zhí)行媒介中執(zhí)行,其中嵌入和包裝了Java庫和API。這些庫和API可能非常龐大,并且它們占用了名為Resident Set Size(RSS)的內(nèi)存的特定部分。
因此,在JVM模式下,Quarkus構(gòu)建過程會生成幾個JAR(Java Archive)文件,如下所示:
-
一個名為?.jar 的瘦JAR,位于 target/quarkus-app/app 中,包含所有應(yīng)用程序的類和其他工件。
-
一個名為 quarkus-run.jar 的空殼JAR,位于 target/quarkus-app 中,包含運行應(yīng)用程序所需的所有工件的列表,但不包括工件本身和應(yīng)用程序。
-
一個包含變換后的應(yīng)用程序字節(jié)碼的JAR,名為 generated-bytecode.jar,位于 target/quarkus-app/quarkus 中。
-
一個名為 lib 的文件夾,位于 target/quarkus-app 中,包含所有應(yīng)用程序的依賴項。
上述所有工件都是在構(gòu)建項目時由quarkus-maven-plugin生成的。此插件還支持創(chuàng)建一個包含運行應(yīng)用程序所需的一切(即應(yīng)用程序的代碼以及所有依賴項的代碼)的über JAR。
與 JVM 模式相反,Quarkus 本機(jī)模式運行可執(zhí)行程序。這些程序直接針對操作系統(tǒng)執(zhí)行,不需要任何 JVM。這種技術(shù)不是將 Java 代碼編譯為通常的字節(jié)代碼(如 JVM 模式),而是編譯為可執(zhí)行文件,從而顯著減少了 RSS 的數(shù)量,從而減少了程序的大小。這提高了他們的表現(xiàn)。為了支持本機(jī)模式,Quarkus 依賴于GraalVM。
在 JVM 模式下運行
前面提到,JVM模式是最簡單的Quarkus運行模式。它包括執(zhí)行quarkus-run.jar位于 target/quarkus-app 中的 。我們的項目在此處的源代碼存儲庫中提供了幾個腳本。讓我們看一下它start-ms.sh,顧名思義,啟動我們的微服務(wù)。
#!/bin/sh
./delete-all-buckets.sh
./create-queue.sh
java -jar ./aws-camelk-file/target/quarkus-app/quarkus-run.jar &
sleep 3
java -jar ./aws-camelk-s3/target/quarkus-app/quarkus-run.jar &
sleep 3
java -jar ./aws-camelk-jaxrs/target/quarkus-app/quarkus-run.jar &
sleep 3
java -jar ./aws-camelk-sqs/target/quarkus-app/quarkus-run.jar &
sleep 3
ps ef | grep -i aws-camelk-file | grep -v grep | awk {'print $1'} > pid-aws-camelk-file.pid
ps ef | grep -i aws-camelk-s3 | grep -v grep | awk {'print $1'} > pid-aws-camelk-s3.pid
ps ef | grep -i aws-camelk-jaxrs | grep -v grep | awk {'print $1'} > pid-aws-camelk-jaxrs.pid
ps ef | grep -i aws-camelk-sqs | grep -v grep | awk {'print $1'} > pid-aws-camelk-sqs.pid
./copy-xml-file.sh
上面的 shell 腳本是一種雜務(wù),因為它接管了運行我們的四個微服務(wù)并適當(dāng)處理它們所需的所有操作。首先,它刪除名稱以字符串“mys3”開頭并后跟隨機(jī)后綴的所有 S3 存儲桶。然后,它會創(chuàng)建一個 AWS SQS 隊列(如果尚不存在)。這些都是理智的操作,確保從干凈的情況開始。
之后,我們的四個微服務(wù)被依次執(zhí)行,它們之間有3秒的等待間隔,以保證它們在被伙伴調(diào)用之前已經(jīng)完全啟動。一旦啟動,它們的 PID 就會保存在擴(kuò)展名為“pid”的文件中。當(dāng)您想要停止它們時,稍后將使用這些文件。
一旦所有微服務(wù)啟動,就會通過將包含要執(zhí)行的匯款的輸入 XML 文件復(fù)制到每個第一個 Camel 路由輪詢的輸入文件夾來觸發(fā)管道。這將激活整個過程,如我們故事的第一部分所述。
因此,要恢復(fù),為了在 Quarkus 的 JVM 模式下運行我們的匯款應(yīng)用程序,請執(zhí)行以下命令:
$ cd aws-camelk
$ ./delete-all-buckets.sh #Deletes all the possible existent "mys3..." S3 buckets
$ ./purge-sqs-queue.sh #Purge the myQueue SQS queue
$ mvn clean package #This will also executes all te defined unit tests
$ ./start-ms.sh ? ? ?#Starts the micro-services and save their associated PIDs
money-transfers.xml這會將位于的文件復(fù)制aws-camelk-model/src/main/resources/xml到該/tmp/input文件夾中。這是 Camel 路由aws-camelk-file正在輪詢的輸入文件夾。
一旦 XML 文件到達(dá)那里,它就會根據(jù)自己的架構(gòu)(位于 中)進(jìn)行驗證,aws-camelk-file/src/main/resource/xsd如果有效,它就會存儲在 AWS S3 存儲桶中,該存儲桶的名稱是字符串“mys3”,我們將隨機(jī)生成的字符串附加到該存儲桶中。此處,XML 文件由aws-camelk-s3Camel 路由進(jìn)行處理,該路由將其分割、標(biāo)記化和流式傳輸,然后將每個生成的 XML 消息發(fā)布到名為“myQueue”的 AWS SQS 隊列。
最后但并非最不重要的一點是,Camel 路由aws-camelk-sqs通過將每個已發(fā)布的消息從 XML 解組為 Java,然后將其編組為 JSON,然后將 HTTP POST 請求發(fā)送到 REST 端點 http://localhost:8080/xfer 來處理每個已發(fā)布的消息。
所有這些管道之后都可以檢查 Quarkus 在控制臺上顯示的日志文件。您可以通過將不同的 XML 文件復(fù)制到輸入目錄中來重復(fù)該過程,只要您愿意。但要注意:您不能處理同一個文件兩次或多次,因為關(guān)聯(lián)的路由是冪等的,這意味著如果多次提供相同的輸入文件將被忽略。但您當(dāng)然可以更改其名稱。
當(dāng)您已經(jīng)足夠使用微服務(wù)時,請運行以下命令:
$ ./kill-ms.sh #Stop the micro-services one by one using their PID
$ ./delete-all-buckets.sh #Delete all the S3 buckets which names start with "mys3"
$ ./purge-sqs-queue.sh #Deletes all the messages in the myQueue SQS queue
$ ./delete-sqs-queue.sh ? ? #Deletes the myQueue SQS queue
現(xiàn)在你的環(huán)境已經(jīng)干凈了。下一篇文章將展示如何在 Quarkus 本機(jī)模式下執(zhí)行與本地運行微服務(wù)相同的操作。請持續(xù)關(guān)注。
作者:Nicolas Duminil
更多內(nèi)容請關(guān)注公號【云原生數(shù)據(jù)庫】
squids.cn,云數(shù)據(jù)庫RDS,遷移工具DBMotion,云備份DBTwin等數(shù)據(jù)庫生態(tài)工具。