Skip to content

🐇 Topics #4

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 1 commit into from
Sep 11, 2024
Merged

🐇 Topics #4

merged 1 commit into from
Sep 11, 2024

Conversation

lucasgianine
Copy link
Owner

Topics

Apesar do uso do direct melhore a forma em que selecionamos as filas que queremos enviar as mensagens, ele ainda nãoconsegue fazer roteamento com base em múltiplos critérios, isto é: e se queremos assinar registros não apenas com a gravidade (severity) mas também com base na fonte que emitiu o registro. (Exemplo que a doc entrega sobre o assunto é o conceito da syslog da ferramenta Unix)

"Mensagens que são enviadas para exchange topics não pode ter uma routing_key arbitrária, deve ter uma lista de palavras delimitada por pontos. [...] Pode haver quantas palavras na chave de roteamento você quiser, até o limite de 255 bytes"

topics segue a mesma linha do direct, as mensagens serão direcionadas para uma fila específica graças ao roteamento, a questão do topics é que você pode selecionar mais de uma fila pra ele.

  • * pode substituir exatamente uma palavra.
  • # pode substituir zero ou mais palavras.
flowchart LR
  P["Producer"]
  X{"direct"}
  Q1["Queue 1"]
  Q2["Queue 2"]
  C1["Consumer 1"]
  C2["Consumer 2"]

  P --> X -- *.orange.* --> Q1 --> C1
  X -- *.*.rabit --> Q2 --> C2
  X -- lazy.# --> Q2
Loading

A documentação separou um ótimo exemplo se levarmos como base que esses três itens são <velocidade>.<cor>.<especie>:

"Uma mensagem com uma chave de roteamento definida como quick.orange.rabbit será entregue a ambas as filas. A mensagem lazy.orange.elephant também irá para ambas. Por outro lado, quick.orange.fox irá apenas para a primeira fila e lazy.brown.fox apenas para a segunda. lazy.pink.rabbitserá entregue à segunda fila apenas uma vez, mesmo que corresponda a duas ligações. quick.brown.foxnão corresponde a nenhuma ligação, então será descartada."

Utilize esses comandos para teste:

  # shell 1
  npm run topic:consumer <facility>.<severity>

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

  # -> [x] Sent '<facility>.<severity>': <mensagem>

@lucasgianine lucasgianine self-assigned this Sep 11, 2024
@lucasgianine lucasgianine merged commit 74b4cbb into main Sep 11, 2024
@lucasgianine lucasgianine deleted the topics branch September 11, 2024 20:33
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