IntelliJ----創建一個運行配置(Application), 用io.vertx.core.Launcher類作為主類,在程序參數輸入:run your-verticle-fully-qualified-name--redeploy=**/*.class --launcher-class=io.vertx.core.Launcher。為了觸發重布署,需要顯示生成項目或者模塊(Build menu->Make project)。
run your-verticle-fully-qualified-name--redeploy=**/*.class --launcher-class=io.vertx.core.Launcher
Vertx的命令行
vertx命令被用於命令行與Vert.x進行交互。這是在運行Vert.x的 verticle的主要方式。為了運行命令行,需要下載並安裝Vert.x發行版,並添加安裝路徑中的bin路徑到PATH環境變量。同時必須確認安裝了Java8的JDK,並在命令行可執行。
注意:需要JDK是為了支持運行時編譯java代碼。
運行Verticles
可以使用vertx run命令從命令行直接運行一個原生的Vert.x veticles。有一兩個run命令的例子。
vertx run my-verticle.js (1)
vertx run my-verticle.groovy (2)
vertx run my-verticle.rb (3)
vertx run io.vertx.example.MyVerticle (4)
vertx run io.vertx.example.MVerticle -cpmy-verticle.jar (5)
vertx run MyVerticle.java
1. 布署一個JavaScript verticle
2. 布署一個Groovy verticle
3. 布署一個Ruby veticle
4. 布署一個已經編譯過的java verticle,根類路徑是當前目錄。
5. 布署一個打成jar包的verticle,jar包必須在類路徑中。
6. 編譯Java源代碼並布署。、
如你所見,在Java例子中,名稱可以是安整合規則的Verticle類名,也可以直接指Java源代碼文件,Vert.x會為你編譯它。
也可給在verticle名稱前添加實現語言前綴。例如,如果Verticle是一個編譯的Groovy類,可以添加groovy:前綴,以便於Vert.x知道,這是一個Groovy類而不是一個Java類。
vertx rungroovy:io.vertx.example.MyGroovyVerticle
vertx run命令可以有一些可選參數,他們是:
· -conf<config_file> 向verticle提供一些配置。config_file是一個包含JSON對象的文本文件的名字。當JSON對象代表了verticle對象的配置,這是可選的。
· -cp<path> - 這是尋找verticle的路徑並且也是verticle要使用的一些其他資源的路徑。默認的“.”(當前路徑)。如果verticle引用了其他腳本,類,或者其他資源(如jar文件),請確保它們在此路徑下。此路徑可以包含多個路徑實體,有:或者;分隔開,具體什么分隔符依賴於操作系統。每個路徑 實體可以是絕對路徑也可以是檔對於包含腳本的路徑,或者絕對,和相對的jar/zip文件的文件名。一個路徑的例子可能是這樣-cpclasses:lib/otherscripts:jars/myjar.jar:jars/otherjar.jar。總是這樣使用路徑引用一些verticle需要的資源。不要將這些資源放在系統類路徑中,因為這樣會在布署的verticle之間造成隔離問題。
· -instance<instance> - 初始veticle實例的數目。每個verticle實例是一個嚴格的單線程,所以為在所有能獲得的運算核心上伸縮應用,應該布署多個實例。如果忽視這個參數,verticle單實例將會部署。
· -worker—此選項決定是verticle是否是一個工作verticle。
· -cluster-port如果cluster選項被設置,此參數決哪個端口通為與其他Vert.x實例進行通迅。默認是0,表明隨機選擇空端口。通常不需要設置此參數除非你真得需要綁定到指定端口。
· -cluster-host如果集群選項被指定,這參數決定那個主機地址被用於與其他Vert.x實例進行通迅。默認是從可用的地址中選擇一個。如果有多個網卡,就需要使用指定的,就在這里設置。
· -ha 如果設置verticle被布署成高可用。參考相關章節獲取更多信息。
· -quorum 與-ha參數聯合使用。此參數指定集群中最小節點數,這些節點為了激活高可用布署ID。默認是0。
· -hagroup與-ha參數聯合使用。指定此節點要加入的HA組。一個集群上可能有多個HA組。節點在失效時,由同組中的其他節點備份。默認值是` __DEFAULT__`
也可以使用 -Dkey=value設置系統屬性
這里有一些更多的例子,用默認的設置運行javascript的verticleserver.js。
vertx run server.js
運行預編譯java verticle 100個實例,並指定類路徑:
vertx run com.acme.MyVerticle -cp"classes:lib/myjar.jar" -instances 10
從源文件運行java verticle 10個實例
vertx run MyVerticle.java -instances 10
運行ruby工作verticle20個實例
vertx run order_worker.rb -instances 20 –worker
在同一個機器上運行兩個Javascript實例,並讓將其集群起來
vertx run handler.js -cluster
vertx run sender.js –cluster
傳入一些參數運行一個Ruby verticle
vertx run my_verticle.rb -conf my_verticle.conf
my_verticle.conf可以包含像下面的內容:
{
"name": "foo",
"num_widgets": 46
}
通過內核API,在verticle內部,可以獲取配置。在使用vert.x高可用特性時,可能想創建一個裸vert.x實例。此實例在啟動后,不布署任何verticles。但是如果集群中的節點崩潰,將會接收一個verticle。為了創建裸實例,啟動如下:
vertx –ha
取決於集群配置,有可能必須添加 cluster-host和cluster-port參數。
從一個fat jar中執行Vert.x應用
一個fat jar包是一個內嵌了依賴的可執行jar包。這就意味着,你不必預選在機器上安裝Vert.x,然后執行jar。與一些可執行java jar包類似,它可以這樣被執行:
java -jar my-application-fat.jar
關於這個,Vert.x沒有什么需要設置的,一些應用程就可以這樣做。也可以創建主程序並在mainfest中進行設置,但,建議編寫自己的verticle代碼,並用Vert.x的Launcher(io.vertx.core.Launcher)類作為你的主類。這個主與與命令行運行Vert.x是相同的主類,因此允許指定命令行參數,如 instances讓應用伸縮更容易。
為了用fat jar方式布署verticle,必須有一個manifest:
· Main-Class設置為 io.vertx.core.Launcher
· Main-Verticle指定主verticle(完整嚴格的類名或腳本文件名
也可使用傳遞給vertx run命令的通用的命令行參數。
java -jar my-verticle-fat.jar -cluster -confmyconf.json
java -jar my-verticle-fat.jar -cluster -confmyconf.json -cp path/to/dir/conf/cluster_xml
默認的,一個fat jar執行run命令。
顯示Vert.x版本
用下面命令顯示Vert.x版本:
vertx version
其他命令
vertx命令行和Launcher都提供除了run和version命令之外的其他命令,可以用下面代碼創建 一個裸實例:
vertx bare
# or
java -jar my-verticle-fat.jar bare
可以在后台啟動一個應用:
java -jar my-verticle-fat.jar start-Dvertx-id=my-app-name
如果 my-app-name沒有設置,一個隨機產生一個ID,並輸出到命令提示。可以將run選項傳遞給start命令:
java -jar my-verticle-fat.jar start-Dvertx-id=my-app-name –cluster
一旦后台加載,可用stop命令停止:
java -jar my-verticle-fat.jar stop my-app-name
也可以列出后台運行的Vert.x應用:
java -jar my-verticle-fat.jar list
start,stop和list命令也可以從vertx工具中找到。start命令支持幾個選項:值
· vertx-id:應用ID,沒有設定,使用隨機UUID
· java-opts:JVM選項,如果未設定,使用JAVA_OPTS變量
· redirect-output:重定向啟動進程輸出和錯誤流到父進程流。
如果選項值包含了空格,一定要用雙引號引起來
因為start命令起動一個新進程,傳入JVM選項不會傳播。所有必須使用‘java-opts’配置JVM。如果設置了CLASSPATH環境變量,請確保包含所有的需要的jar包(vert-xore,應用jar及所有依賴項)
命令集合是可擴展的,參考擴展vert.x加載器小節。
熱布署
在文件改變時自動重新布署應用,在開發應用時是非常方便的。vertx命令行工具和更常用的Launcher 類都提供此特性。下面有一些例子:
vertx run MyVerticle.groovy--redeploy="**/*.groovy" --launcher-class=io.vertx.core.Launcher
vertx run MyVerticle.groovy--redeploy="**/*.groovy,**/*.rb" --launcher-class=io.vertx.core.Launcher
java io.vertx.core.Launcher runorg.acme.MyVerticle --redeploy="**/*.class" --launcher-class=io.vertx.core
.Launcher -cp ...
重布署實現如下。首先,應用程序以后台應用加載(用start命令)。匹配文件變化,進程被停止並且應用重新啟動。這樣可以避免泄漏。
為了啟用執布署,向run命令添加—redeploy選項。--redeploy指定要監視的文件集合。這個文件集合使用Ant風格模式(用**,*和?)匹配。你可以指通過用”,”號分隔指定多個集合。模式是相對於當前工作目錄的。
傳遞給run命令的參數被傳給了應用。可用—java-opts設置JVM選項。
--launcher-class選項指定應用啟動的主類。通常是Launcher,但也可以使用自己的主類。
在IDE中也可以使用重布署的特性:
· Eclipse---創建一個運行配置(Run configuration),用io.vertx.core.Launcher類作為主類。在程序參數區域(在參數標簽),輸入run your-verticle-fully-qualified-name--redeploy=**/*.java --launcher-class=io.vertx.core.Launcher。也可以加入其他參數。在保存文件時,Eclipse會增量編譯修改的文件,重新布署平滑工作。
· IntelliJ----創建一個運行配置(Application), 用io.vertx.core.Launcher類作為主類,在程序參數輸入:run your-verticle-fully-qualified-name--redeploy=**/*.class --launcher-class=io.vertx.core.Launcher。為了觸發重布署,需要顯示生成項目或者模塊(Build menu->Make project)。
為了調試你的應用,創建你的運行配置作為遠程應用並用—java-opts配置調試器。然而,不要忘記在每次重新布署一個新進程時重新插入調試器。
也可以在布署周期的構建進程下鈎子。
java -jar target/my-fat-jar.jar--redeploy="**/*.java" --on-redeploy="mvn package"
java -jar build/libs/my-fat-jar.jar--redeploy="src/**/*.java" --on-redeploy='./gradlew shadowJar'
on-redeploy選項指定一個在應用關閉或應用重啟后調用的命令,所以能鈎信你的構建工具,如果更新一些運行時資源。例如啟動gulp或者grunt更新你的資源。
重新布署特性支持下面設置:
· redeploy-scan-period:文件系統檢查周期,單位毫秒,默認250ms
· redeploy-grace-period:在兩重布署之間的等待時間默認是1000ms,單位毫秒
redeploy-termination-period:在停止應用之后啟動用戶命令之前的等待時間量。這在Windows上是有用的,因為進程不是立既被kill。單位毫秒,默認值為0ms.
