Introdução
Neste tutorial, abordaremos a construção de microserviços escaláveis utilizando a linguagem Elixir e o framework Phoenix. Vamos explorar como utilizar o Ecto para gestão de banco de dados e GenServers para otimização de processos em tempo real. A estrutura de microserviços permite que cada componente da aplicação funcione de forma independente, melhorando a escalabilidade e a manutenção. Você aprenderá a configurar seu ambiente, criar um projeto Phoenix, implementar a lógica de negócios com Ecto, e entender como o GenServer pode ser usado para criar soluções de processamento paralelo. Este guia é ideal para desenvolvedores que desejam ampliar seus conhecimentos em Elixir e construir aplicações robustas e responsivas.
Etapas
Configuração do Ambiente de Desenvolvimento
Antes de começar, certifique-se de que você possui o Elixir e o Phoenix instalados. Você pode verificar as versões do Elixir e do Hex (gerenciador de pacotes do Elixir) usando os comandos `elixir -v` e `mix -v`. A instalação do Phoenix requer também o Node.js para gerenciamento de assets.
commands# Verificar versões do Elixir e do Mix
elixir -v
mix -vCriar um Novo Projeto Phoenix
Utilize o comando `mix phx.new` para criar um novo projeto Phoenix. Lembre-se de incluir a opção `–live` se desejar usar o LiveView, mas neste tutorial, nos concentraremos na API básica.
commands# Criar um novo projeto Phoenix
mix phx.new microservico --no-ectoConfigurando o Ecto com PostgreSQL
Adicione o Ecto e um adaptador de banco de dados como PostgreSQL ao seu projeto. Abra o arquivo `mix.exs` e inclua as dependências.
mix.exsdefp deps do [ {:phoenix, "~> 1.5.9"}, {:phoenix_pubsub, "~> 2.0"}, {:ecto_sql, "~> 3.5"}, {:postgrex, ">= 0.0.0"}, {:phoenix_html, "~> 2.10"}, {:phoenix_live_reload, "~> 1.2", only: :dev} ] end
Criar o Banco de Dados
Configure seu banco de dados no arquivo `config/dev.exs` e crie o banco de dados usando o comando do Ecto.
configconfig :microservico, Microservico.Repo, username: "postgres", password: "postgres", database: "microservico_dev", hostname: "localhost", pool_size: 10
commands# Criar o banco de dados
mix ecto.createGerando o Contexto e o Modelo
Agora, vamos criar um contexto e um modelo para representar nossos dados. Utilize o comando `mix phx.gen.context` para gerar um modelo simples, como `Usuario`.
commands# Gerar contexto e modelo de usuário
mix phx.gen.context Conta Usuario usuarios nome:string email:stringCriando o Controlador e rotas
Crie um controlador para expor a API REST dos usuários. Isso incluirá métodos para criar, listar, atualizar e deletar usuários.
UsuariosController.exdefmodule MicroservicoWeb.UsuariosController do use MicroservicoWeb, :controller alias Microservico.Conta alias Microservico.Conta.Usuario def index(conn, _params) do usuarios = Conta.list_usuarios() render(conn, "index.json", usuarios: usuarios) end # Métodos adicionais para criar, atualizar e deletar usuários end
Implementação de GenServers
Para otimizar processos, implemente um GenServer que cuidará de operações longas ou tarefas em segundo plano, como o envio de emails. Crie um novo módulo GenServer.
EmailSender.exdefmodule Microservico.EmailSender do use GenServer # Iniciar o GenServer def start_link(_) do GenServer.start_link(__MODULE__, :ok, name: __MODULE__) end # Trabalhar com a função handle_info/2 def handle_info(:send_email, state) do # Lógica para enviar o email {:noreply, state} end end
Testes Unitários
Implemente testes unitários para validar a lógica do seu contexto e controlador. Utilize `ExUnit` para testes de integração com o banco de dados.
UsuarioTest.exdefmodule Microservico.Conta.UsuarioTest do use ExUnit.Case, async: true alias Microservico.Conta.Usuario test "criação de usuário" do assert {:ok, %Usuario{}} = Conta.create_usuario(%{nome: "Teste", email: "teste@exemplo.com"}) end end
Executando a Aplicação e Testes
Por fim, utilize os comandos do Mix para iniciar sua aplicação. Teste suas rotas usando ferramentas como Postman ou cURL.
commands# Iniciar a aplicação
mix phx.server
# Executar os testes
mix test
# Testar a API com cURL
curl -X GET http://localhost:4000/api/usuarios
Conclusão
Neste tutorial, você aprendeu como construir microserviços escaláveis usando Elixir e o framework Phoenix. Desde a configuração do projeto até a implementação de GenServers e testes, cada parte contribui para a construção de aplicações eficientes e de fácil manutenção. Agora, com essas bases sólidas, você pode avançar no desenvolvimento de aplicações em tempo real e explorar as capacidades oferecidas por Elixir e sua comunidade vibrante.