Skip to content

🐇 Routing #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Sep 11, 2024
Merged

🐇 Routing #3

merged 2 commits into from
Sep 11, 2024

Conversation

lucasgianine
Copy link
Owner

Routing

Trabalharemos com roteamento junto ao que foi aprendido no item anterior, redirecionaremos mensagens de erros críticas para o arquivo de log (economizando espaço no disco).
Ainda trabalharemos em cima das bindings, e dessa vez, passaremos parâmetros de chave de binding para que possamos fazer uma exchange direta para diversas queues

Anteriormente enviávamos mensagens para todos os consumers sem nenhuma filtragem, isso se dava ao fato de usarmos a troca fanout, dessa vez usaremos a troca direct que enviará mensagens para queues específicas, e todas as outras mensagens sem um binding key serão descartadas.

// logs/emit_logs.js
const exchange = 'direct_logs'
channel.assertExchange(exchange, 'direct', {
  durable: false
})
channel.publish(exchange, severity, Buffer.from(message))
// logs/receive_logs.js
args.forEach((severity) => {
  channel.bindQueue(q.queue, exchange, severity)
})

Aplicaremos esse tipo de troca no nosso sistema de logs, trocaremos fanout por direct e forneceremos uma routing key na hora de publicar para selecionar a gravidade que o receptor irá receber.
severity é o tipo de routing key que passaremos, nesse caso vamos assumir que ela seja info, warning ou error.

flowchart LR
  P["Producer"]
  X{"direct"}
  Q1["Queue 1"]
  Q2["Queue 2"]
  C1["Consumer 1"]
  C2["Consumer 2"]

  P --> X -- error --> Q1 --> C1
  X -- info --> Q2 --> C2
  X -- warning --> Q2
  X -- error --> Q2
Loading

Utilize esses comandos para teste:

  # shell 1
  npm run receive_logs

  # -> Será criado um arquivo .log na pasta src/logs
  # -> No arquivo aparecerá a <rountingKey> e a <mensagem> escrita no próximo shell
  # shell 2
  npm run emit_logs <rountingKey> <mensagem>

  # -> [x] Sent '<rountingKey>': <mensagem>

@lucasgianine lucasgianine self-assigned this Sep 11, 2024
@lucasgianine lucasgianine changed the title 🐇 Rounting 🐇 Routing Sep 11, 2024
@lucasgianine lucasgianine merged commit 85308c7 into main Sep 11, 2024
@lucasgianine lucasgianine deleted the rounting branch September 11, 2024 14:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant