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

  1. 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 -v

  2. Criar 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-ecto

  3. Configurando 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.exs
    defp 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

  4. 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.

    config
    config :microservico, Microservico.Repo,
      username: "postgres",
      password: "postgres",
      database: "microservico_dev",
      hostname: "localhost",
      pool_size: 10

    commands
    # Criar o banco de dados
    mix ecto.create

  5. Gerando 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:string

  6. Criando 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.ex
    defmodule 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

  7. 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.ex
    defmodule 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

  8. 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.ex
    defmodule 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

  9. 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.

Hashtags

#Elixir #Phoenix #Microserviços #Ecto #GenServer #DesenvolvimentoDeSoftware