Quarkus系列——Vert.x应用(番外篇)

发布时间 2023-04-03 23:20:36作者: loveletters

前言

由于客观原因(穷)导致博客首页加载时间有点慢,大概需要3秒才能加载出服务端渲染的基础页面。所以想着能够提高首页加载速度,我决定在nginx上做个缓存。为了不影响内容的及时更新,我设置的缓存的有效期仅为10分钟。这样导致在缓存过期后第一次加载页面会cache miss,所以为了解决这个问题。我决定写个程序定时去请求一次,以达到缓存续约,由于我nginx上没有装清理缓存的插件,所以只能做到让它失效后再重新缓存。

环境准备

由于这个功能比较简单,所以我准备直接用Quarkus实现,然后打包成native程序。不涉及到web服务,所以我们这里都不用选择。

Vert.x应用

Quarkus与Spring类似都支持通过@Scheduled(cron="0 15 10 * * ?")的方式来实现定时任务,但是我这里想介绍一下如何在Quarkus中使用Vert.x所以不用它提供的这种方式而是用vertx.setPeriodic() 来实现。

Eclipse Vert.x 是JVM上构建 响应式 应用的工具。 响应式应用既可以随着工作负载的增长而 扩展 ,又可以在出现故障时 弹性回复 。 响应式应用是 即时响应 的,因为它能有效利用系统资源并保护自身免受错误影响,从而使延迟可控

我的想法是在Quarkus启动的时候部署一个verticle,然后在这个verticle中执行请求。

我们先定义一个自己的verticle,这个verticle就是我们主要的业务代码,每一分钟请求一次首页。

然后我们在Quarkus启动的时候部署这个Verticle,@Observes StartupEvent ev,通过这个注解可以让我们在容器启动的时候执行一些操作。

值得注意的是我们会发送https的请求,所以在打包成native文件的时候需要在配置文件中开启quarkus.ssl.native=true

自此我们的编码工作已经完成来,在服务器上编译运行查看结果:

后记

想要实现我的需求有很多方式,直接在服务器上写定时任务也可以,我之所以通过编码的方式主要还是为了介绍一下如何在Quarkus中使用Vert.x。