Using Vert.x from the command line

vertx命令通过命令行与Vert.x平台进行交互。它的主要作用是运行Vert.x``module和原生verticle

如果你在命令行中仅仅输入vert,那么命令行中会输出vertx命令会采用哪些选项。

Running verticles directly

你可以在命令行中直接通过使用vertx run命令直接运行原生Vert.x verticle实例。

对于快速原型代码(quickly prototyping code)或者简单的应用程序,运行原生verticle是非常有用的,但是一般在正式应用程序中,我们建议将你的应用打包成一个module来运行。打包成的module更加易于运行,封装和复用。

一个最简单的vertx示例,就是传递给它一个verticle名字选项,然后将该verticle运行起来。

如果你的verticle是通过JavaScript, Ruby, Groovy or Python等脚本语言编写的,那么你只需要将脚本的名字传递给它。(例如erver.js, server.rb, or server.groovy.)

如果verticle是通过Java来编写的,那么verticle的名字就是应用程序的主类的全限定名,或者是应用程序的主类的Java源文件名,然后由Vert.x编译该源文件,再运行它。

下面给出俩种运行verticle方式:

I. 直接运行

  1. vertx run app.js
  2. vertx run server.rb
  3. vertx run accounts.py
  4. vertx run MyApp.java
  5. vertx run com.mycompany.widgets.Widget
  6. vertx run SomeScript.groovy

II. 在verticle名前加上该verticle实现语言。例如你的verticle是一个编译好的Groovy类,如果你指定好前缀为groovy,那么Vert.x就知道它是Groovy class而不是Java class。

  1. vertx run groovy:com.mycompany.MyGroovyMainClass

vertx run命令会使用下面几个选项:

  • -conf <config_file>verticle提供一些配置。<config_file>是一个text文件的名称,该文件包含一个json形式的配置说明,该选项是可选的。

  • -cp <path> 这个路径指定verticle文件和verticle中使用到的其他资源的路径。默认值是.(当前路径)。如果你的verticle引用了其他脚本,类,或者资源(如jar文件),那么你要确保可以在该路径中找到他们。该路径可以通过:分割,包含多个路径。每一个路径都可以是相对或者是绝对路径。例如:-cp classes:lib/otherscripts:jars/myjar.jar:jars/otherjar.jar.需要注意的是,不要将这些值放到系统类路径中(system classpath),因为这可能会导致在部署应用时,产生不可预期的问题。

  • -instances <instances> 指定在Vert.x中需要实例化该verticle的数量。每一个verticle实例都必须在单线程中运行,为了能够通过可用核心来扩展你的应用程序,你也许想将同一个verticle文件部署多个实例(这样一来,多个线程就可以运行同一种verticle了)。如果忽略该选项,那么默认的就只会部署一个实例。

  • -includes <mod_list> 一个通过,分割的module名称列表,这些module都被包含在verticleclasspath中。

  • -worker 该值用于指定verticle是否是以工作者的形式启动

  • -cluster 这个选项用于指定该Vert.x实例是否和同一网络下的其他Vert.x实例组成一个集群。集群化的Vert.x实例会将Vert.x和其他节点形成一个分布式事件总线。默认值是false

  • -cluster-port 如果指定了-cluster值为true-cluster-port指定和其他Vert.x实例组成集群的端口号。默认值是0,则随机一个可用端口。一般你不需要指定这个值,除非你真的需要指定一个特殊的端口。

  • -cluster-host 如果指定了-cluster值为true,-cluster-host指定和其他Vert.x实例组成集群的域名。默认的它会从可用的网络接口中,随机选择一个。如果你的网卡中有多个网络接口,那么你也可以选择一个自己想用的。

下面给出了一些vertx run示例:

根据默认配置运行一个JavaScript verticle

  1. vertx run server.js

下面运行10个指定classpath的编译好的Java verticle实例

  1. vertx run com.acme.Myverticle -cp "classes:lib/myjar.jar" -instances 10

用Java源代码运行10个verticle实例

  1. vertx run Myverticle.java -instances 10

运行20个ruby工作者verticle实例

  1. vertx run order_worker.rb -instances 20 -worker

在同一台机器上运行2个JavaScript verticle实例,同时将他们和其他服务器组成一个集群。

  1. vertx run handler.js -cluster
  2. vertx run sender.js -cluster

通过指定配置文件运行一个ruby verticle实例

  1. vertx run my_vert.rb -conf my_vert.conf

my_vert.conf 只包含一些简单配置:

  1. {
  2. "name": "foo",
  3. "num_widgets": 46
  4. }

Forcing language implementation to use

Vert.xlangs.properties配置文件中包含了Vert.x能够识别的语言,然后Vert.x会自动识别出module是通过什么语言编写的。有时候也会有一些模棱两可的情况,例如你想要将一个Groovy类作为一个verticle,那么你就可以将实现语言作为前缀加在verticle前,例如:

  1. vertx run groovy:com.mycompany.MyGroovyMain`verticle`

Running modules from the command line

我们高度建议你将任何非实验性的Vert.x功能打包成一个module。至于如何将你的代码打包成一个module,你可以参考module`s manual

想要运行一个module,那你就不能再使用vertx run命令了,而是要使用vertx runmod <modulename>. 同样,该命令也带有一些选项:

  • -conf <config_file> - 与vertx run意义相同
  • -instances <instances> - 与vertx run意义相同
  • -cluster - 与vertx run意义相同
  • -cluster-host - 与vertx run意义相同
  • -cp 如果该选项被赋值,那么它将覆盖标准module classpath,然后Vert.x将会在指定的路径搜索mod.json文件和其他module资源。这在某些情况下非常有用,例如,你在IDE中开发了一个module,你可以在不同的classpath中运行该module,然后你就能找到存储项目资源的实际classpath,然后再指定classpath

如果你想要运行一个本地没有安装的moduleVert.x会自动尝试从仓库(仓库可配置)中安装它。一般Vert.x会被配置到从Maven Central, Sonatype Nexus, Bintray 以及你本地仓库安装module。你也可以在Vert.x conf directory中的repos.txt中配置其他Maven仓库。

下面是一些直接运行module的示例:

运行一个名为com.acme~my-mod~2.1的实例

  1. vertx runmod com.acme~my-mod~2.1

运行一个名为com.acme~other-mod~1.0.beta1module,我们指定配置,同时运行10实例

  1. vertx runmod com.acme~other-mod~1.0.beta1 -instances 10 -conf other-mod.conf

Running modules directory from .zip files

vertx runzip命令能直接从一个modulezip文件中直接运行module. 运行的module不要求已经安装在本地或者已经安装在一个module仓库里。

  1. vertx runzip <zip_file_name>

zipmodule运行示例

  1. vertx runzip my-mod~2.0.1.zip

实际上,Vert.x会解压zip文件,将module解压到系统临时目录里,然后从该目录里运行该module

Running modules as executable jars (fat jars)

Vert.x还支持装配fat jars. fat jars都是可运行jar包,它们同时包含着Vert.x的二进制文件,这样你就可以直接通过运行fat jars来运行里面module

  1. java -jar my`module`-1.0-fat.jar

这意味着,当你想要通过运行fat jarsmodule时,你的机器上可以不安装Vert.x,因为jar包中已经包含了所需的Vert.x的二进制文件。

你也可以在命令行中向fat jars中传递Vert.x平台参数

  1. java -jar my`module`-1.0-fat.jar -cluster -conf myconf.json

你也可以向fat jars传递-cp参数,该参数同样作用于Vert.x平台。下面的例子就在运行module时,指定了一个自定制的cluster.xml

  1. java -jar my`module`-1.0-fat.jar -cluster -conf myconf.json -cp path/to/dir/containiner/cluster_xml

可以使用下面的命令创建一个fat jar

  1. vertx fatjar <module_name>

Or you can use the Gradle task in the standard Gradle build or the Maven plugin to build them.

If you want to override any Vert.x platform configuration, e.g. langs.properties, cluster.xml or logging configuration, you can add those files to the directory platform_lib inside your module that you’re making into a fat jar. When executing your fat jar Vert.x will recognise this directory and use it to configure Vert.x with.

Displaying version of Vert.x

使用下面的命令查看当前安装的Vert.x的版本

  1. vertx version

Installing and uninstalling modules

参考 module`s manual.