在 Quarkus 上使用 Kotlin 开始响应式编程

了解 Quarkus 如何使开发人员能够继续使用 Kotlin 编程 API 来开发响应式 Java 应用程序。
1 位读者喜欢这篇文章。
clouds in windows

Opensource.com。CC BY-SA 4.0

对于使用多种编程语言(如 Java、C#、JavaScript、Scala 和 Groovy)来实现业务需求的企业来说,采用事件驱动架构迁移到云端引发了巨大的担忧。 由于企业需要单独为容器部署重新设计多个架构,并投入更多精力来优化云端的生产,因此开发人员通常必须学习一种与生产环境相符的新编程语言。 例如,Java 开发人员必须将其技能转换为 Node.Js 才能开发轻量级的事件前端应用程序。

Kotlin 解决了这些问题,并面向在 Java 虚拟机 (JVM) 上使用多种编程语言部署业务应用程序的各种开发人员。 Kotlin 使用命令式和响应式方法来处理这些问题。 但是,要赶上 Kotlin 的新语法和 API 仍然很困难,尤其是对于 Java 开发人员。 幸运的是,Quarkus Kotlin 扩展使开发人员可以更轻松地实现 Kotlin 应用程序。

使用 Quarkus CLI 创建新的 Kotlin 项目

我将以使用 Quarkus 命令行创建一个新的 Maven 项目为例。 以下命令添加 Quarkus 扩展以启用 RESTEasy Reactive、Jackson 和 Kotlin 扩展

$ quarkus create app reactive-kotlin-example -x kotlin,resteasy-reactive-jackson

输出应如下所示

...
[SUCCESS] ✅  quarkus project has been successfully generated in:
--> /Users/danieloh/Downloads/demo/reactive-kotlin-example
...

接下来,我将使用 Quarkus Dev Mode,它启用 实时编码来解决内部循环开发中的性能问题。 它简化了从编写代码到访问端点或刷新 Web 浏览器的开发工作流程,而无需重新编译和重新部署周期。 运行以下命令

$ cd reactive-kotlin-example
$ quarkus dev

输出应如下所示

...
INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, kotlin, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, vertx]

--
Tests paused
Press [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>

使 Kotlin 以 Quarkus 的方式运行

Kotiln 提供了一个协程来并发运行一段代码,类似于 Java 中的线程。 协程可以在一个线程中挂起,然后在另一个线程中恢复。 Quarkus 使开发人员能够组合挂起函数。

打开 src/main/kotlin/org/acme 目录中的 ReactiveGreetingResource.kt 文件,将 hello() 方法替换为以下代码

@GET
@Produces(MediaType.TEXT_PLAIN)
suspend fun hello() = "Hello RESTEasy Reactive by Kotlin Suspend function"

注意:在使用 Quarkus CLI 创建新的 Kotiln 项目时,会自动生成此资源文件。

如果新的 suspend 函数在 Quarkus 开发环境中工作,请确保访问 RESTful API (/hello)。 在本地终端中执行以下 curl 命令行,或者也可以使用 Web 浏览器访问端点 URL

& curl localhost:8080/hello

输出应如下所示

Hello RESTEasy Reactive by Kotlin Suspend function

太棒了! 它运行良好。 现在,我将在 Kotlin 应用程序中启用 Java 的上下文和依赖注入 (CDI) 功能。

在 Kotlin 应用程序中启用 CDI 注入

Kotlin 中的反射和注解与 Java 初始化属性的方式不同。 它可能会导致开发人员出现问题(例如,UninitializedPropertyAccessException)。 在代码中启用 CDI 注入之前,请在 src/main/kotlin/org/acme 目录中创建一个新的 GreetingService.kt 服务文件

@ApplicationScoped
class GreetingService {

    fun greeting(name: String): String {
        return "Welcome Kotlin in Quarkus, $name"
    }

}

返回到 ReactiveGreetingResource.kt 文件。 添加以下代码以使用 @Inject 注解,通过 @field: Default 采用 Kotlin 注解和反射

@Inject
@field: Default
lateinit var service: GreetingService

@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/{name}")
fun greeting(@PathParam("name") name: String): String {
    return service.greeting(name)
}

如果 CDI 注入有效,请访问新端点 (/hello/{name})。 在本地终端中执行以下 curl 命令,或者使用 Web 浏览器访问端点 URL

& curl localhost:8080/hello/Daniel

输出应如下所示

Welcome Kotlin in Quarkus, Daniel

总结

您学习了 Quarkus 如何使开发人员能够继续使用 Kotlin 编程 API 来开发响应式 Java 应用程序。 开发人员可以从 开发服务实时编码等功能中受益。 他们还通过 本机可执行文件提高了云环境部署的性能。 在另一篇文章中,我将展示如何使用 Kotlin 和 Quarkus 开发数据事务功能。

danieloh
技术营销、开发者倡导者、CNCF 大使、公共演讲者、已发表的作者、Quarkus、Red Hat Runtimes

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.