Primeiros passos na programação reativa com Vert.x

Conheça esta poderosa plataforma para desenvolvimento de aplicações web e serviços.

Fique por dentro
Este artigo é útil por apresentar, na teoria e na prática, as principais características, conceitos e detalhes da plataforma Vert.x, solução que tem como principais pilares a simplicidade no desenvolvimento, escalabilidade e assincronicidade através da sua natureza reativa, suportando múltiplas linguagens de programação, como Java, JavaScript, Ruby, entre outras. Uma das principais vantagens da plataforma Vert.x é sua versatilidade para o desenvolvimento de aplicações web e serviços sem forçar uma arquitetura pré-estabelecida, porém ao mesmo tempo fornecendo todo um ferramental bastante produtivo.

O Vert.x é um projeto independente, hospedado atualmente pela Eclipse Foundation e com contribuições feitas por vários indivíduos e organizações, sendo Tim Fox seu principal desenvolvedor e fundador. Conforme definição do próprio Tim Fox, o Vert.x é uma plataforma poliglota para desenvolvimento de aplicações que se beneficiam do modelo moderno de aplicações reativas e assíncronas. As suas principais características são destacadas a seguir:

· Poliglota: é possível criar diversos componentes para sua aplicação em diferentes linguagens. Atualmente suportando Java, JavaScript, Groovy, Ruby e Python, mas com outras linguagens como Scala, Closure e PHP em estágios de desenvolvimento;

· Reativo e assíncrono: a base do desenvolvimento com Vert.x é feita utilizando-se APIs assíncronas e não bloqueantes. Este modelo facilita a escalabilidade através do uso de múltiplas instâncias dos componentes da aplicação, modelo este dificultado quando a aplicação adota uma abordagem bloqueante. Esta proposta de desenvolvimento é baseada no conceito de Reactive Programming ou Programação reativa (vide BOX 1);

· Modelo de concorrência baseado em Atores (Actors): as unidades de código escritas para serem executadas no Vert.x, conhecidas como verticles, são fundamentalmente single threaded. Isso significa que cada verticle é executado sempre em uma thread específica, consequentemente reduzindo a complexidade quando comparado com a computação concorrente tradicional, dado que toda a necessidade de sincronização e locks entre threads simplesmente se torna desnecessária;

· Plataforma para aplicações: o Vert.x é uma plataforma genérica para uso geral que pode ser utilizada para diversos tipos de aplicação, compreendendo desde aplicações web, com destaque especial para as aplicações web em 'tempo real', quanto tradicionais aplicações back end.


BOX 1. Programação Reativa

A programação reativa pode ser definida como sendo a possibilidade de se desenvolver uma aplicação baseado em um fluxo assíncrono de dados. Em linhas gerais, a aplicação deve responder a eventos e estímulos assim que estes ocorrerem. Estes estímulos podem ser desde um simples clique em um botão, a requisições HTTP ou alterações em arquivo em disco.

Do ponto de vista arquitetural, percebe-se que o Vert.x compartilha muito da abordagem adotada por frameworks e plataformas como Akka e Erlang/OTP, inspirando-se em conceitos neles implementados, como actors e seus sistemas de eventos assíncronos.

O que é um Verticle?

Um verticle é uma unidade executável de código em uma instância do Vert.x e pode ser escrito em quaisquer das linguagens suportadas e já mencionadas. Uma particularidade interessante é a possibilidade de vários verticles poderem ser executados concorrentemente em uma mesma instância do Vert.x, independente destes terem sido implementados em uma mesma linguagem ou não.

Outro aspecto de destaque é que uma aplicação pode ser – e geralmente é – composta por mais de um verticle e estes podem estar disponíveis em diferentes nós da rede, comunicando-se entre si através do event bus do Vert.x, conforme veremos mais adiante neste artigo.

Para aplicações mais simples, como exemplos, testes ou provas de conceito simplistas, verticles podem ser organizados unitariamente e executados diretamente na linha de comando, mas quando falamos em aplicações reais, geralmente os verticles são empacotados utilizando o conceito de módulos.

Configurando seu ambiente de desenvolvimento

Para os exemplos e testes apresentados neste artigo, iremos utilizar além do Vert.x 2.1.5, o Java 8 update 31 e o NetBeans IDE 8.0.2. O primeiro passo para a codificação destes exemplos é fazer o download destas ferramentas nos seus respectivos websites, todos disponíveis na seção Links. Feito isso, realize a instalação do Java e do NetBeans.

Para a instalação do Vert.x, basta descompactar a versão baixada na pasta de sua escolha e colocar a pasta bin na variável de ambiente PATH do seu sistema operacional. Para mais detalhes sobre a instalação, o guia de instalação oficial do Vert.x pode ser consultado (veja o endereço indicado na seção Links). Para testar a instalação, execute no console/terminal o comando vertx version e algo similar a “2.1.5 (built 2014-11-13 15:15:56)” deve ser impresso.

Vamos então criar nosso primeiro Verticle de exemplo. Para isso, crie um arquivo chamado Server.java em qualquer pasta no seu sistema. Como sugestão, vamos assumir que este foi criado na pasta de usuário padrão do sistema, por exemplo: /home/jm/Server.java. Logo após, adicione o código da Listagem 1 no mesmo.

Listagem 1. Exemplo de verticle chamado Server. Iniciará um servidor HTTP em localhost:8080. import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.platform.Verticle; import java.util.Map; public class Server extends Verticle { public void start() { vertx.createHttpServer().requestHandler(requisicao -> { requisicao.response().headers().set("Content-Type", "text/html; charset=UTF-8"); requisicao.response().end("<html><body><h1>Olá do Vert.x!</h1></body></html>"); }).listen(8080, "localhost"); } }

A partir desse código podemos executar nosso primeiro verticle. Portanto, abra o terminal ou o prompt de comando do seu ambiente e dirija-se para a pasta onde o verticle foi salvo (no nosso caso, /home/jm). Agora, basta executar o comando:

cd /home/jm vertx run Server.java

Deste modo, a mensagem Succeeded in deploying verticle deve ser exibida no console/terminal. Agora abra o navegador, entre com o caminho do nosso servidor, " [...] continue lendo...

Artigos relacionados