Creare microservice in Kotlin con Vert.x

Creare microservice in Kotlin con Vert.x

Vert.x è una libreria che ci consente di creare microservice, e non solo, in diversi linguaggi.

Come potete vedere dalla documentazione, è composto di diversi "moduli", di cui i principali al momento sembrano:

  • core
  • web
  • web client

Oggi vediamo un esempio di web in Kotlin.

Se usate Maven potete aggiungere la dipendenza nel pom.xml:

<dependency>
	<groupId>io.vertx</groupId>
	<artifactId>vertx-web</artifactId>
	<version>3.8.3</version>
</dependency>

Cominciamo con l'esempio più basico:

import io.vertx.core.Vertx

fun main(args: Array<String>) {
    val vertx = Vertx.vertx()
    var server = vertx.createHttpServer()

    server.requestHandler { request ->
        var response = request.response()
        response.putHeader("content-type", "text/plain")
        response.end("Ciao da vert.x e kotlin")
    }

    server.listen(8080)
    println("In ascolto su http://localhost:8080/")
}

Aprite il browser su http://localhost:8080/ per vedere il risultato.

Il secondo esempio utilizza già l'oggetto Router, che useremo di più nei prossimi esempi; il codice qui sotto ha lo stesso risultato del primo esempio:

import io.vertx.core.Vertx
import io.vertx.ext.web.Router

fun main(args: Array<String>) {
    val vertx = Vertx.vertx()
    val server = vertx.createHttpServer()

    val router = Router.router(vertx)
    router.route().handler { routingContext ->
        val response = routingContext.response()
        response.putHeader("content-type", "text/plain")
        response.end("Primo esempio Router")
    }

    server.requestHandler(router).listen(8080)

    println("In ascolto su http://localhost:8080/")
}

Qui sotto aggiungiamo una Route con un path specifico:

import io.vertx.core.Vertx
import io.vertx.ext.web.Router

fun main(args: Array<String>) {
    val vertx = Vertx.vertx()
    val server = vertx.createHttpServer()

    val router = Router.router(vertx)

    val route1 = router.route().path("/")
    route1.handler { routingContext ->
        val response = routingContext.response()
        response.putHeader("content-type", "text/plain")
        response.end("Primo esempio Router")
    }

    val route2 = router.route().path("/path")
    route2.handler { routingContext ->
        val response = routingContext.response()
        response.putHeader("content-type", "text/plain")
        response.end("Ciao da route1!")
    }

    server.requestHandler(router).listen(8080)

    println("In ascolto su http://localhost:8080/")
}

Aprite il browser e provate ad andare sia su http://localhost:8080/ che su http://localhost:8080/path.

Infine vediamo un esempio di come passare dei valori alla Route:

import io.vertx.core.Vertx
import io.vertx.core.http.HttpMethod
import io.vertx.ext.web.Router

fun main(args: Array<String>) {
    val vertx = Vertx.vertx()
    val server = vertx.createHttpServer()

    val router = Router.router(vertx)

    val route1 = router.route().path("/")
    route1.handler { routingContext ->
        val response = routingContext.response()
        response.putHeader("content-type", "text/plain")
        response.end("Primo esempio Router")
    }

    val route2 = router.route(HttpMethod.GET, "/ciao/:nome")
    route2.handler { routingContext ->
        val nome = routingContext.request().getParam("nome")
        val response = routingContext.response()
        response.putHeader("content-type", "text/plain")
        response.end("Ciao $nome")
    }

    server.requestHandler(router).listen(8080)

    println("In ascolto su http://localhost:8080/")
}

Per questo esempio andate sia http://localhost:8080/ che su http://localhost:8080/ciao/VOSTRO_NOME.

Ovviamente il discorso non si esaurisce qui; questa libreria può fare molto di più.

Sicuramente tornerò sull'argomento, in quanto mi sembra molto interessante.

Enjoy!




Share

Commentami!

About Mattepuffo.com

Blog dedicato all'informatica e alla programmazione!
Tutti i contenuti di questo blog, tranne casi particolari, sono sotto licenza Licenza Creative Commons Creative Commons Attribution-Noncommercial-Share Alike 2.5. .

2690 articoli
310 commenti
19 progetti
Altri link
  • About
  • Scrivimi
  • Copyright
  • Sitemap
  • matteo.ferrone@yahoo.it
  • GitHub
  • Privacy Policy