Comience con la programación reactiva con Kotlin en Quarkus
Descubra cómo Quarkus permite a los desarrolladores seguir utilizando las API de programación de Kotlin para aplicaciones Java reactivas.
Pasar a la nube con una arquitectura basada en eventos genera grandes preocupaciones para las empresas que utilizan múltiples lenguajes de programación como Java, C#, JavaScript, Scala y Groovy para implementar los requisitos comerciales. Debido a que las empresas necesitan rediseñar múltiples arquitecturas para la implementación de contenedores por separado y poner más esfuerzo en optimizar la producción en la nube, los desarrolladores a menudo deben aprender un nuevo lenguaje de programación acorde con el entorno de producción. Por ejemplo, los desarrolladores de Java tienen que cambiar sus habilidades a Node.Js para desarrollar aplicaciones ligeras orientadas a eventos.
Kotlin aborda estos problemas y se dirige a varios desarrolladores que implementan aplicaciones comerciales con múltiples lenguajes de programación sobre Java Virtual Machine (JVM). Kotlin maneja estos problemas con enfoques tanto imperativos como reactivos. Sin embargo, todavía hay prisa por ponerse al día con la nueva sintaxis y API de Kotlin, especialmente para los desarrolladores de Java. Afortunadamente, la extensión Quarkus Kotlin facilita a los desarrolladores la implementación de aplicaciones Kotlin.
Cree un nuevo proyecto Kotlin usando Quarkus CLI
Crearé un nuevo proyecto maven usando la línea de comando Quarkus como ejemplo. El siguiente comando agrega extensiones de Quarkus para habilitar las extensiones RESTEasy Reactive, Jackson y Kotlin:
$ quarkus create app reactive-kotlin-example -x kotlin,resteasy-reactive-jackson
La salida debería verse así:
...
[SUCCESS] ✅ quarkus project has been successfully generated in:
--> /Users/danieloh/Downloads/demo/reactive-kotlin-example
...
A continuación, usaré el modo Quarkus Dev, que permite la codificación en vivo para resolver el problema de rendimiento en el desarrollo del bucle interno. Simplifica el flujo de trabajo de desarrollo, desde escribir código hasta acceder al punto final o actualizar un navegador web sin volver a compilar y volver a implementar el ciclo. Ejecute los siguientes comandos:
$ cd reactive-kotlin-example
$ quarkus dev
La salida debería verse así:
...
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>
Haz que Kotlin se comporte al estilo Quarkus
Kotiln proporciona una rutina para ejecutar un bloque de código simultáneamente, similar a un hilo en Java. La rutina se puede suspender en un hilo y luego reanudarse en otro hilo. Quarkus permite a los desarrolladores componer funciones de suspensión.
Abra el archivo ReactiveGreetingResource.kt
en el directorio src/main/kotlin/org/acme
para reemplazar el método hello() con el siguiente código:
@GET
@Produces(MediaType.TEXT_PLAIN)
suspend fun hello() = "Hello RESTEasy Reactive by Kotlin Suspend function"
Nota: Este archivo de recursos se genera automáticamente mientras crea un nuevo proyecto de Kotiln utilizando la CLI de Quarkus.
Asegúrese de acceder a la API RESTful (/hello
) si la nueva función de suspensión funciona en el entorno de desarrollo de Quarkus. Ejecute la siguiente línea de comando curl
en su terminal local, o también puede acceder a la URL del punto final mediante un navegador web:
& curl localhost:8080/hello
La salida debería verse así:
Hello RESTEasy Reactive by Kotlin Suspend function
¡Excelente! Funciona bien. Ahora habilitaré la capacidad de inyección de contexto y dependencia (CDI) de Java en la aplicación Kotlin.
Habilite la inyección CDI en la aplicación Kotlin
Los reflejos y anotaciones en Kotlin son diferentes de cómo Java inicializa las propiedades. Probablemente cause que los desarrolladores tengan un problema (por ejemplo, UninitializedPropertyAccessException). Antes de habilitar la inyección de CDI en el código, cree un nuevo archivo de servicio GreetingService.kt
en el directorio src/main/kotlin/org/acme
:
@ApplicationScoped
class GreetingService {
fun greeting(name: String): String {
return "Welcome Kotlin in Quarkus, $name"
}
}
Vuelva al archivo ReactiveGreetingResource.kt
. Agregue el siguiente código para usar la anotación @Inject para adoptar la anotación de Kotlin y la reflexión por @field: Default:
@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)
}
Acceda al nuevo punto final (/hello/{name}) si la inyección CDI funciona. Ejecute el siguiente comando curl
en la terminal local o acceda a la URL del punto final mediante un navegador web:
& curl localhost:8080/hello/Daniel
La salida debería verse así:
Welcome Kotlin in Quarkus, Daniel
Envolver
Aprendiste cómo Quarkus permite a los desarrolladores seguir usando las API de programación de Kotlin para aplicaciones Java reactivas. Los desarrolladores se benefician de funciones como servicios de desarrollo y codificación en vivo. También aumentan el rendimiento para la implementación del entorno de nube a través de un ejecutable nativo. En otro artículo, mostraré cómo desarrollar funciones de transacción de datos usando Kotlin con Quarkus.