Comunicação de microsserviços com AMQP e RabbitMQ
O padrão de arquitetura de microsserviços tem sido amplamente adotado na indústria de software. Nesse modelo, passamos a dividir os antigos — e enormes — sistemas monolíticos em diversos pequenos componentes independentes, que comunicam-se entre si para executar as tarefas necessárias.
A comunicação entre múltiplos serviços geralmente é feita através de protocolos como o HTTP (por meio de APIs REST), ou AMQP (por meio de softwares como o RabbitMQ).
Neste artigo, iremos focar na arquitetura do protocolo AMQP, e como utilizá-la com o RabbitMQ.
A arquitetura
No AMQP, temos as seguintes “peças”:
- Producer
- Broker
- Exchange
- Direct
- Fanout
- Topic - Binding
- Queue
- Consumer
Producer é quem envia mensagens para o broker.
Broker é um servidor que “separa” e entrega as mensagens. Como se fosse uma “agência dos correios”.
Consumer é quem recebe as mensagens por meio do broker.
Como você deve ter notado, o broker tem alguns componentes próprios. Vamos entende-los agora.
O Exchange é onde o producer coloca a mensagem que quer enviar. Ele faz o Binding (conecta / vincula) da mensagem com uma ou mais Queue’s, de acordo com o tipo especificado, que pode ser: direct, fanout ou topic.
O exchange Direct encaminha as mensagens para as queues que tenham o nome igual ao routing key especificado na mensagem. Por exemplo: mensagens com uma routing key account-updated
serão encaminhadas para a queue com o nome account-updated
.
No exchange Fanout, ao invés de enviar uma mensagem para uma fila (relação 1:1), as mensagens são clonadas e enviadas a todas as queues que estiverem vinculadas a ele (relação 1:N). Esse comportamento é muito conhecido pelo nome de “Publish/Subscribe” ou “Pub/Sub”.
E por fim no exchange Topic, temos um controle um pouco mais avançado sobre a entrega das mensagens. Com ele, é possível usar curingas para associar as mensagens com as diferentes queues existentes na aplicação.
Conclusão
Com essa base teórica sobre o protocolo AMQP e a arquitetura do RabbitMQ, já podemos ter uma ideia melhor de como esses caras podem nos ajudar a resolver essa parte de comunicação entre diversos microsserviços. Muito bom!
Em um próximo artigo vamos “colocar a mão na massa” para fazer alguns exemplos de código usando o RabbitMQ com JavaScript. Fique ligado!