220px Vert.x Logo.svg

Aproveitei a noite fria de sábado (tá 5°C em Porto Alegre) para brincar com o lib VertX. Temos alguns microserviços na empresa usando essa lib, e vários brenchmarks apontam que ele é muito rápido.

Para quem não conhece: VertX é uma lib para criar aplicações reativas, ou como dizem alguns colegas, "ele faz aquela coisa lá que tem no node" :-)
Foi criado em 2011, é descrito no site como event driven, non blocking, poliglota (JVM, JavaScript) e "divertido".

"" Os exemplos que eu criei estão disponíveis no github. ""

Minhas Impressões:

  • É parecido com o Spring em propósito, já que facilita integrações com outros frameworks/libs/serviços, como Kafka, Mongo, Redis, etc. Veja a quantidade de módulos no maven repository já criados.

  • Quick start é bem simples. Veja esses exemplos na wikipedia. Um exemplo de servidor web se resume a:

import io.vertx.core.AbstractVerticle;

public class Server extends AbstractVerticle {
  public void start() {
    vertx.createHttpServer().requestHandler(req -> {
      req.response()
        .putHeader("content-type", "text/plain")
        .end("Hello from Vert.x!");
    }).listen(8080);
  }
}

Os exemplos que criei ficaram entre 20-60 linhas.

mongoClient.save("products", product1, id -> {
    System.out.println("Inserted id: " + id.result());

    mongoClient.find("products", new JsonObject().put("itemId", "12345"), res -> {
        System.out.println("Name is " + res.result().get(0).getString("name"));

        mongoClient.remove("products", new JsonObject().put("itemId", "12345"), rs -> {
            if (rs.succeeded()) {
            System.out.println("Product removed ");
            }
        });
    });
});

Conclusão

Tirando a questão performance que é muito forte, eu ainda criaria microserviços usando outras opções (ex: Groovy + Spring, Node).

Não me entenda mal, eu curto sistemas reativos, falo sobre event sourcing…​ Mas no caso do Node toda a linguagem e ecosistema estão preparados para isso. E já sairam do callback, foram para Promises e estão no async/await, tornando sintaxe e sistemas reativos por natureza.

Programar reativo em java com callback parece quase como "programador java programando funcional em scala", onde o resultado quase sempre não é programação funcional. É preciso uma mudança de paradigma (funcional x OO), e não só sintaxe.

Enfim, cada caso é um caso, cada problema exige uma solução diferente.

"" E você leitor? Qual sua opinião sobre o VertX? ""