Ballerina, uma linguagem de programação na jvm focada em Integração de serviços
Ballerina é uma linguagem de programação de propósito geral de código aberto que é desenvolvida pela WSO2. Ballerina se concentra principalmente em integrações de APIs e, portanto, possui um modelo de programação simples, mas poderoso. A implementação atual do Ballerina é executada na JVM. A linguagem de programação Ballerina, incluindo o compilador, bibliotecas e todas as ferramentas, é totalmente gratuita e de código aberto e está disponível no github.
A linguagem inclui abstrações de sintaxe para concorrencia e network, e tem correspondencia aos diagramas de sequência — o que permite o mapeamento bidirecional para qualquer código-fonte Ballerina entre sua representação textual e sua representação gráfica como um diagrama de sequência.
Isso significa que os desenvolvedores podem alternar entre a codificação com texto ou diagramas, enquanto a equipe menos técnica pode usar o Ballerina em uma abordagem low code para o desenvolvimento de aplicativos, mantendo total fidelidade ao código.
O aspecto de low code do Ballerina é o plugin VS Code que desenha um diagrama de sequência do código. O diagrama é atualizado para cada alteração de código salvo, portanto, está sempre atualizado. Uma visão do código está sempre disponível para referência.
Alguns recursos da linguagem:
- Tem um sistema de tipo estrutural (semântico), o que significa que os nomes dos tipos não importam, apenas a forma do tipo é considerada. Isso a torna mais semelhante às linguagens dinamicamente tipadas, enquanto fornece a segurança e o suporte de ferramentas de linguagens estaticamente tipadas.
- É null safe.
- Tem um modelo de threading leve, onde pode-se escrever código de maneira simples e fazer com que seja executado em paralelo.
- Podemos gerar artefatos de implantação de Docker e Kubernetes com uma configuração simples.
- Tem um sistema de gerenciamento de configuração embutido.
Demonstrando a linguagem
escrevendo um serviço gRPC Ballerina simples e invocando o serviço por meio de um aplicativo cliente gRPC Ballerina.
Primeiro, instale o software da ballerina fazendo o download nesse link https://ballerina.io/learn/install-ballerina/set-up-ballerina/
Tambem instale o plugin do ballerina para o vs code https://marketplace.visualstudio.com/items?itemName=WSO2.ballerina
Em um programa RPC, você primeiro define a interface de serviço usando uma Interface Definition Language (IDL) para criar a definição de serviço (ou seja, o boilerplate.proto). O gRPC geralmente usa Protocol Buffers como o IDL. Você compila o arquivo de definição de serviço (ou seja, boilerplate.proto) e gera o código-fonte para os aplicativos de serviço e cliente. No Ballerina, você pode gerar o código-fonte usando a ferramenta Protocol Buffers to Ballerina integrada.
Criando o service definition
Primeiro vamos criar uma pasta para nosso projeto
mkdir grpc
dentro dessa pasta crie um arquivo de definição do grpc com o nome de boilerplate.proto, o arquivo precisa ser similar a imagem abaixo.
Implementando o GRPC Service
Primeiro, crie o projeto do serviço grpc
bal new greeter_service
Voce deve ver a confirmação de que o projeto foi criado
Created new package 'greeter_service' at greeter_service.
Deve ser criada uma pasta com o greeter_service dentro dela devera ter arquivos como na imagem abaixo.
main.bal é um arquivo de código do ballerina, com um teste simples de print, abra o arquivo, ele devera ser como esse
Ao clicar no botão de play verde, no canto superior direito o código será compilado e executado, e deverá printar “Hello, World!” no seu terminal.
Podemos deletar esse arquivo, não utilizaremos ele, vamos gerar o código para o nosso teste grpc tendo essa pasta como destino, e usando o comando abaixo
bal grpc — mode service — input boilerplate.proto — output greeter_service/
Esse comando deverá criar dois arquivos, greeter_service.bal e boilerplate_pb.bal, a pasta ficará parecida com isso
boilerplate_pb.bal file é o arquivo stub, que contém classes que o cliente/serviço usa para conversar entre si e os tipos Ballerina correspondentes às mensagens de request e response.
greeter_service.bal file é o arquivo de modelo de serviço, que contém serviço(s) com todos os métodos remotos definidos no arquivo .proto.
o serviço é gerado com um erro por não ter um retorno no método sayHello, adicione como retorno
return {message: “Hello “ + value.name};
Nesse código temos
- Um listener que cria um service gRPC com a porta 9090. O listener é a entidade que escuta a entrada que chega à porta e entrega para o(s) serviço(s) correto(s).
- Cria um service e atribue o listener a ele, a anotação cria um mapeamento interno entre a declaração e o .proto
- Define uma função remote de acordo com o que foi definido no .proto
Agora podemos executar usando o comando
bal run
Com isso o servidor grpc já está rodando na porta 9090
Criando o client GRPC
Voltemos para a pasta raiz e vamos criar o ballerina project do nosso client
bal new greeter_client
Com o projeto criado vamos criar agora o stub do greeter client com um comando similar ao service, mas com o mode client
bal grpc — mode client — input boilerplate.proto — output greeter_client/
Dentro do método main adicione o código de chamada do service
HelloReply sayHello = check ep->sayHello({name: “Ballerina”});
io:println(`Response : ${sayHello.message}`);
Agora execute o client para vermos o resultado da chamada do service
bal run
O print deverá most -Response : Hello Ballerina
Isso foi só uma introdução a linguagem Ballerina, que é extremamente voltada para integração e seu poder de expressividade, cada vez mais tem se mostrado importante possuir recursos como esse no leque de desenvolvimento de um time moderno de microserviços, obvimente não se aplica a todos os cenários e não parece necessario para projetos menores, mas possui grande relevancia para cenários mais complexos de integração, vale a pena dar uma olhadinha.