DEV Community

Beatriz813
Beatriz813

Posted on

Utilização do RabbitMQ para cenários de roteamento complexo.

Ao ler a documentação ou posts que falam sobre o caso de uso do RabbitMQ, sempre lemos que ele é uma ótima opção para cenários de roteamento de mensagem, mas por que ele é a melhor opção?

Este fato se dá pelos artifícios de roteamento que o Rabbit oferece, que são as exchanges e os bindings. As exchanges são entidades para onde as mensagens são enviadas e então roteadas para uma fila de acordo com as regras especificadas nos bindings (vinculação entre a exchange e a fila) dessas exchanges. Dessa forma ele se torna a ferramenta mais adequada para o roteamento de mensagens, porque assim essa lógica de direcionamento é retirada da aplicação e é atribuída para o Rabbit.

Figura 1 — Utilização de exchange do tipo headersFigura 1 — Utilização de exchange do tipo headers

A figura acima descreve o seguinte exemplo: dado um sistema de abertura de chamados, um cliente pode abrir um chamado relacionado a uma categoria de problema — pagamento, pedido ou técnico.
Porém, as regras de roteamento para cada fila acontece da seguinte forma:

  • De acordo com a categoria do problema (pagamento, pedido ou técnico).

  • Se a equipe de pedidos tiver menos de três agentes disponíveis, as mensagens de problemas de pedidos devem ser encaminhadas para a equipe de suporte técnico. Se a equipe de suporte de pagamentos tiver menos de dois agentes disponíveis, as mensagens de problemas de pagamento devem ser encaminhadas para a equipe de suporte técnico.

Para este cenário poderia ser usado outro broker, como o Apache Kafka por exemplo, mas essa decisão traria essa complexidade de roteamento para dentro da aplicação. Optando pelo RabbitMQ a aplicação só terá a responsabilidade de informar para a exchange a categoria do problema e a quantidade de funcionários disponíveis em cada setor. E assim a exchange se encarregará da distribuição das mensagens de acordo com as regras configuradas nos bindings.

Top comments (0)