quarkus实战之四:远程热部署

这篇具有很好参考价值的文章主要介绍了quarkus实战之四:远程热部署。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

将本地的改动极速同步到远程服务端,并自动生效,掌握此技能,开发调试会更高效

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 本文是《quarkus实战》系列的第四篇,如标题所示,今天的任务是完成远程热部署实战
  • 作为一名Java程序员,以下场景相信您很熟悉:
  1. 在本地电脑上:用IDEA写代码,编译构建成jar或者docker镜像
  2. 在服务器上:运行jar或者docker镜像
  3. 遇到问题时:通过热部署,使本地的改动立即在服务器上生效,这一切都是自动的,无需打包部署等操作
  • 就是下图这样:
    quarkus实战之四:远程热部署

  • 以上是常见的处理问题手段,如果咱们的代码是quarkus应用,也能这样远程调试吗?

  • 答案是可以,接下来咱们一起实战如何远程调试quarkus应用

牢记来自官方的警告

  • 如下图红框所示,来自官方的警告咱们一定要牢记在心,远程热部署功能有巨大安全隐患,不要用在生产环境:
    quarkus实战之四:远程热部署

在服务器上的运行方式

  • 接下来的实战,为了省事儿,在服务器上的运行方式选用docker,也就是说本地做好docker镜像后,运行在服务器的docker上

demo项目

  • 今天用到的demo项目非常简单,有个普通的web接口即可
  • 执行以下命令,创建名为hello-quarkus的maven工程
mvn "io.quarkus:quarkus-maven-plugin:create" \
  -DprojectGroupId="com.bolingcavalry" \
  -DprojectArtifactId="hello-quarkus" \
  -DprojectVersion="1.0-SNAPSHOT" \
  -DclassName="HobbyResource" \
  -Dpath="actions"
  • 为了演示修改配置文件也能立即生效的效果,把HobbyResource.java改成下面这样,注意注解ConfigProperty的作用是将指定配置的值注入修饰的成员变量中:
package com.bolingcavalry;

import org.eclipse.microprofile.config.inject.ConfigProperty;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.time.LocalDateTime;

@Path("/actions")
public class HobbyResource {

    @ConfigProperty(name = "greeting.message")
    String message;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return message + ", Hello RESTEasy " + LocalDateTime.now();
    }
}
  • 打开文件application.properties,增加以下三个配置,每个配置的作用请看注释:
# 这是一个自定义属性,在业务代码中使用ConfigProperty注解取得其值
greeting.message=message from configuration
# 远程调试时用到的参数,可变jar,也就是支持热部署的jar
quarkus.package.type=mutable-jar
# 远程调试时用到的参数,为了安全起见,需要指定密码
quarkus.live-reload.password=changeit
  • 以上就是所有项目代码了

制作docker镜像

  • 在pom.xml所在目录执行以下命令,完成普通的编译构建:
mvn clean package -U -DskipTests
  • 再执行以下命令,根据刚才编译的结果制作docker镜像,注意,这是基于jar+jdk的镜像,不是二进制可执行文件的镜像:
docker build \
-f src/main/docker/Dockerfile.jvm \
-t bolingcavalry/hello-quarkus-jar:0.0.7 .
  • 您需要做些操作以便服务器能运行这个镜像,例如导出为tar,然后在服务器导入,或者推送到某个镜像仓库,让服务器从仓库pull等都可以
  • 我这里的做法是推送到hub.docker.com上,您可以按照自己的实际情况选择用哪种方式

在服务器运行

  • 接下来的操作是在服务器上进行的
  • 首先确保服务器可以使用这个镜像(访问镜像仓库、或者用tar导入等)
  • 执行以下命令启动镜像,注意环境变量QUARKUS_LAUNCH_DEVMODE是必须的,且值为true,这是开启远程热部署的关键:
docker run \
-i \
--rm \
-p 8080:8080 \
-e QUARKUS_LAUNCH_DEVMODE=true \
bolingcavalry/hello-quarkus-jar:0.0.7
  • 控制台输出如下图,应用成功启动,红框中显示已经进入热部署状态,随时可以接受远程调试同步过来的变化:
    quarkus实战之四:远程热部署
  • 验证服务是否正常,我这里服务器IP地址是192.168.50.27,所以浏览器访问http://192.168.50.27:8080/actions,结果如下图,符合预期:
    quarkus实战之四:远程热部署
  • 接下来要尝试远程热部署了

远程热部署

  • 接下来的操作是在本地开发电脑上进行的
  • 执行以下命令,启动本地与远程的同步模式:
mvn quarkus:remote-dev -Dquarkus.live-reload.url=http://192.168.50.27:8080
  • 控制台输出如下:
[INFO] Compiling 2 source files to /Users/will/temp/202203/01/001/hello-quarkus/target/test-classes
Listening for transport dt_socket at address: 5005
2022-03-02 08:52:44,299 INFO  [org.jbo.threads] (main) JBoss Threads version 3.4.2.Final
2022-03-02 08:52:45,488 INFO  [io.qua.dep.QuarkusAugmentor] (main) Quarkus augmentation completed in 1532ms
2022-03-02 08:52:46,402 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Sending quarkus-app-dependencies.txt
2022-03-02 08:52:46,418 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Sending quarkus-run.jar
2022-03-02 08:52:46,424 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Sending app/hello-quarkus-1.0-SNAPSHOT.jar
2022-03-02 08:52:46,453 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Connected to remote server
  • 由上述信息可见,此时本地与远程服务器的连接已建立,可以尝试修改本地文件,看能否自动同步了
  • 修改配置文件application.properties,将greeting.message的值改为aaabbb
  • 修改过后,不会立即同步,需要再次调用web接口才会触发同步,去刷新浏览器,如下图,发现本地修改的配置文件已经同步到服务器,并且生效了:
    quarkus实战之四:远程热部署
  • 看本地控制台输出以下内容,提示了同步的详情:
2022-03-02 08:57:40,568 INFO  [io.qua.dep.dev.RuntimeUpdatesProcessor] (Remote dev client thread) File change detected: /Users/will/temp/202203/01/001/hello-quarkus/src/main/resources/application.properties
2022-03-02 08:57:40,572 INFO  [io.qua.dep.dev.RuntimeUpdatesProcessor] (Remote dev client thread) Restarting quarkus due to changes in application.properties, HobbyResource.class.
2022-03-02 08:57:41,138 INFO  [io.qua.dep.QuarkusAugmentor] (Remote dev client thread) Quarkus augmentation completed in 564ms
2022-03-02 08:57:41,143 INFO  [io.qua.dep.dev.RuntimeUpdatesProcessor] (Remote dev client thread) Live reload total time: 1.082s 
2022-03-02 08:57:41,556 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Sending lib/deployment/.io.quarkus.quarkus-resteasy-common-spi-2.7.1.Final.jar.baiduyun.uploading.cfg
2022-03-02 08:57:41,640 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Sending quarkus-run.jar
2022-03-02 08:57:41,649 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Sending app/hello-quarkus-1.0-SNAPSHOT.jar
2022-03-02 08:57:41,676 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Sending dev/app/application.properties
  • 此时去看服务器上的控制台,也有信息输出,如下图红框,应用在收到同步的内容后,内部自动重启了(注意,是内部重启,docker容器并未发生变化):
    quarkus实战之四:远程热部署
  • 刚才尝试的是修改配置文件,现在试试修改源代码,改动如下图红框:
    quarkus实战之四:远程热部署
  • 浏览器访问服务的web服务,如下图,改动已经生效:
    quarkus实战之四:远程热部署
  • 开发电脑的控制台输出同步信息,这次是class文件:
2022-03-02 09:05:56,243 INFO  [io.qua.dep.QuarkusAugmentor] (Remote dev client thread) Quarkus augmentation completed in 520ms
2022-03-02 09:05:56,248 INFO  [io.qua.dep.dev.RuntimeUpdatesProcessor] (Remote dev client thread) Live reload total time: 0.985s 
2022-03-02 09:05:56,610 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Sending dev/app/com/bolingcavalry/HobbyResource.class
2022-03-02 09:05:56,804 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Sending quarkus-run.jar
2022-03-02 09:05:56,811 INFO  [io.qua.ver.htt.dep.dev.HttpRemoteDevClient] (Remote dev client thread) Sending app/hello-quarkus-1.0-SNAPSHOT.jar
  • 再看服务器的控制台,再次重启应用,红框中显示接受到class文件的变化:
    quarkus实战之四:远程热部署
  • 至此,远程热部署功能操作完成,多掌握一个实用技能对后续的学习和开发都有帮助,希望本篇能给您一些参考

欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...文章来源地址https://www.toymoban.com/news/detail-599025.html

到了这里,关于quarkus实战之四:远程热部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git 本地改动了,不保留,直接拉取线上最新代码

    如果您在本地做了改动,但是又不想保留这些改动,可以使用以下命令强制拉取远程最新代码,覆盖掉本地代码: 其中 为您需要拉取的分支名称,例如:master。 第一条命令 git fetch --all 将会从远程仓库获取最新的代码和分支信息,但不会进行合并。 第二条命令 git reset --ha

    2024年02月11日
    浏览(42)
  • Java扩展Nginx之四:远程调试

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《Java扩展Nginx》系列的第四篇,一起来体验个实用的功能,此能力定会让爱学习的您大呼过瘾,它就是广大java程序员在日常开发和定位问题过程中常用的神技:远程调试; 看变量、看堆栈,

    2024年02月15日
    浏览(40)
  • Linux本地Yearning SQL审核平台本地部署与远程访问

    Yearning 简单, 高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具,为DBA与开发人员使用.本地部署,注重隐私,简单高效的MYSQL审计平台。 下面介绍Linux 简单部署Yearning 并结合cpolar 内网穿透工具实现远程访问,破除访问限制,提高工作效率!! 在Github上下载对应的Linux 安装包:htt

    2024年02月05日
    浏览(55)
  • 本地Linux 部署 Dashy 并远程访问

    转载自cpolar极点云文章:本地Linux 部署 Dashy 并远程访问 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。一款功能超强大,颜值爆表的可定制

    2024年02月11日
    浏览(42)
  • quarkus实战之一:准备工作

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《quarkus实战》系列是欣宸在2022年春季推出的又一个精品原创系列,作者将自己对java的热爱渗透到每段文字和每行代码中,全系列秉承欣宸一贯的知识+实战风格,既有知识普及、更有实际操作,在涉

    2024年02月16日
    浏览(43)
  • quarkus实战之六:配置

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《quarkus实战》系列的第六篇,咱们来掌握一个常用知识点:配置 如同SpringBoot中的 application.properties 文件,对一个quarkus应用来说,配置是其重要的组成部分,web端口、数据库这些重要信息都放

    2024年02月16日
    浏览(32)
  • 本地Linux 部署 Dashy 并远程访问教程

    转载自cpolar极点云文章:本地Linux 部署 Dashy 并远程访问 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。一款功能超强大,颜值爆表的可定制

    2024年02月12日
    浏览(39)
  • Elasticsearch搜索分析引擎本地部署与远程访问

    Elasticsearch是一个基于Lucene库的分布式搜索和分析引擎,它提供了一个分布式、多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档,同时也是是一个非常强大的工具,可以用于各种用途,例如日志分析、搜索引擎、安全分析等等。 远程连接的好处在于可以让用户从远程位

    2024年02月05日
    浏览(46)
  • quarkus实战之七:使用配置

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《quarkus实战》系列的第七篇,前文讲述了如何在将配置信息传入quarkus应用,今天要练习的是如何使用这些配置信息 整篇文章由以下内容构成: 创建工程,作为演示使用配置项操作的代码 演

    2024年02月15日
    浏览(31)
  • quarkus实战之八:profile

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本文是《quarkus实战》系列的第八篇,经过前面的学习,咱们对配置有了足够了解,但问题也随之而来:如何让应用以最小的改动同时运行在不同环境(如本地、测试、生产等) 举个例子,下面是个

    2024年02月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包