Quarkus云原生微服务开发实战
上QQ阅读APP看书,第一时间看更新

2.2 通用的应用开发流程

在创建了Quarkus应用之后,开发人员进行实际的代码编写工作。在开发过程中,Quarkus的开发模式可以极大地提升开发的效率。除此之外,Maven插件还提供了其他的命令来执行额外的操作。

2.2.1 使用开发模式

运行Maven插件的dev命令可以在开发模式下启动Quarkus应用,如下面的代码所示。这也是Quarkus应用的基本开发模式。

在开发模式下,Quarkus启用了代码的自动热部署。当Java源代码或资源文件发生了修改之后,只需要刷新页面或重新访问服务,Quarkus会在后台编译Java代码,然后重新部署应用,再使用部署之后的应用来处理请求。这种热部署的方式为开发人员提供了良好的开发体验,不再需要手动地重启服务器来测试改动之后的代码。如果代码编译或重新部署时产生了错误,错误信息会出现在控制台,也会显示在页面中。由于需要进行热部署,在代码修改之后的第一个访问请求的处理时间会较长。

默认情况下,开发模式下的Quarkus应用运行在localhost上,只允许在本机访问。如果希望在其他主机上也能访问,可以使用系统属性debugHost来设置,如下面的代码所示。

在开发模式下,Quarkus还提供了Web界面来获取应用的内部信息,并可以对应用进行修改。该Web界面的默认访问地址是http://localhost:8080/q/dev/。图2-2展示了Quarkus开发界面的截图。该开发界面是可扩展的,不同的扩展都可以提供相关的界面。该界面的实际展示内容取决于应用所添加的扩展。

·图2-2 Quarkus的开发界面

2.2.2 调试应用

在开发模式下,Quarkus应用默认启用了Java远程调试支持,并在端口5005运行。在IntelliJ IDEA中,只需要创建一个远程调试的调试配置,并连接到端口5005即可。

如果在一台机器上同时运行多个Quarkus应用,需要为每个应用分别指定调试服务的端口号,否则只有第一个启动的应用可以被调试。Quarkus应用的调试行为可以通过系统属性debug来调整。该属性的可选值如表2-1所示。

表2-1 系统属性debug的可选值

下面的命令使用5006作为调试端口。

如果要调试的代码运行在应用的启动阶段,最好的做法是以暂停模式启动应用。在暂停模式下,应用的启动会被暂停,直到有客户端连接到调试服务器。这样可以保证不会错过任何添加的调试断点。

通过系统属性suspend可以设置是否启用暂停模式。当该值为y或true时,启用暂停模式;当值为n或false时,禁用暂停模式。下面的命令以暂停模式在5006端口进行调试。

2.2.3 实用的插件命令

Quarkus的Maven插件提供了很多实用的命令。除了之前介绍的create、dev和build之外,下面介绍其他的命令。

1 查看全部扩展

除了在code.quarkus.io网站查看全部的扩展之外,还可以使用下面的命令列出全部可用的扩展。对于每个扩展,会列出它的名称和标识符。

如果想查看扩展的更多信息,可以添加参数-Dquarkus.extension.format=full。在运行下面的命令时,会输出扩展的描述信息。

2 添加和删除扩展

Quarkus应用可以随时添加和删除所用的扩展。Maven插件的命令add-extension和add-ex-tensions可以添加新的扩展。在添加时需要指定扩展的标识符。可以从list-extensions命令的输出中查看扩展的标识符。下面的命令展示了添加扩展的用法。

与add-extension和add-extensions命令相对应的remove-extension和remove-extensions命令用来删除扩展,同样需要提供扩展的标识符。下面的命令展示了删除扩展的用法。

除了使用Maven插件的命令之外,也可以直接在POM文件中添加和删除扩展相关的依赖声明。比如,只需要在POM文件中添加下面代码中给出的依赖声明就可以启用扩展grpc。上面介绍的Maven插件的命令实际上也是在修改POM文件。

Quarkus框架提供的标准扩展的Maven工件的groupId是io.quarkus,而artifactId都以quarkus-作为前缀。在后续的章节中介绍扩展的名称时,都会忽略该前缀。

3 列出可用的平台

可以使用下面的命令列出全部可用的平台。

上述命令的执行结果如下所示。目前有两个可用的Quarkus平台。第一个quarkus-universe-bom是绝大多数应用使用的平台;第二个quarkus-bom只包含了Quarkus的核心扩展。