O documento descreve o processo de envio de notificações em Elixir, incluindo: (1) o cliente cria regras para segmentar usuários e define a mensagem; (2) o serviço busca os dados de envio e envia as notificações para provedores de forma concorrente; (3) Elixir é usado por ser funcional, concorrente e tolerante a falhas, atendendo aos requisitos de escalabilidade, resiliência e manutenibilidade.
3. Algoritmo
• Cliente cria uma regra que define quais dos seus usuários
devem receber a mensagem (segmentação)
• Cliente define a mensagem (e-mail, SMS, browser-push, etc) a
ser enviada para o segmento feito
• Cliente, através plataforma da Dito, inicia o envio da notificação
• O serviço de envio inicia a busca dos dados do envio
(mensagem da notificação, dados dos usuários, etc)
• Concorrentemente ao passo anterior, o serviço de envio, inicia o
envio das notificações para os provedores (Movile, Firebase,
etc)
40. defmodule S do
use GenServer
def start_link(_args) do
GenServer.start_link(!__MODULE!__, :ok, [])
end
def init(:ok) do
{:ok, 0}
end
def handle_call(:get, _from, state) do
{:reply, state, state}
end
def handle_cast(:inc, state) do
{:noreply, state + 1}
end
end
41. Iniciando o GenServer
def start_link(_args) do
GenServer.start_link(!__MODULE!__, :ok, [])
end
def init(:ok) do
{:ok, 0}
end
# Uso
{:ok, pid} = S.start_link([])
42. Utilizando o GenServer
def handle_call(:get, _from, state) do
{:reply, state, state}
end
def handle_cast(:inc, state) do
{:noreply, state + 1}
end
GenServer.call(pid, :get)
# 0
GenServer.cast(pid, :inc)
# :ok
GenServer.call(pid, :get)
# 1