O que é RabbitMQ?

Compartilhar:

RabbitMQ é um sistema de mensagens de código aberto altamente confiável, flexível e escalável. Ele atua como um intermediário entre diferentes aplicações, permitindo que elas se comuniquem e transmitam mensagens uns aos outros de maneira eficiente e confiável.

Criado originalmente pela Rabbit Technologies Ltd. e agora mantido pela Pivotal Software, o RabbitMQ é amplamente utilizado em sistemas distribuídos e arquiteturas de microservices.

Como Funciona o RabbitMQ?

Em sua essência, o RabbitMQ implementa o padrão de mensagens de fila (message queuing) baseado em um protocolo de mensagens padrão conhecido como Advanced Message Queuing Protocol (AMQP). Ele opera por meio de uma fila de mensagens, onde os produtores enviam mensagens para a fila e os consumidores retiram essas mensagens para processamento.

O sistema utiliza uma variedade de conceitos-chave:

  1. Produtor: É o remetente da mensagem, responsável por enviar os dados para o RabbitMQ.
  2. Consumidor: É o destinatário da mensagem, que recebe as mensagens da fila e as processa conforme necessário.
  3. Fila: Armazena as mensagens enviadas pelos produtores até que os consumidores estejam prontos para recebê-las.
  4. Exchange (Troca): Um componente que recebe mensagens dos produtores e decide a que fila enviar com base em regras definidas.
o que é rabbitmq

RabbitMQ com Spring Boot

Para começarmos, precisamos adiciona uma dependência do AMQP que é o protocolo onde o RabbitMQ utiliza, falamos dele no inicio do artigo, bom então vamos adiciona-lo no pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
</dependencies>

Agora com a dependência precisamos criar uma classe de configuração no Spring Boot, para definir qual será o nome da fila, nome da exchange e também a routing_key, veremos abaixo como a classe deve ficar:

package br.com.virandoprogramador.config

import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

    public static final String QUEUE_NAME = "nome_da_fila";
    public static final String EXCHANGE_NAME = "nome_da_exchange";
    public static final String ROUTING_KEY = "routing_key";

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setRoutingKey(ROUTING_KEY);
        rabbitTemplate.setQueue(QUEUE_NAME);
        rabbitTemplate.setExchange(EXCHANGE_NAME);
        return rabbitTemplate;
    }
}

A classe RabbitMQConfig é uma classe de configuração no contexto do Spring Boot que define a configuração necessária para integrar e utilizar o RabbitMQ na aplicação. Ela contém um método rabbitTemplate() que é anotado com @Bean, indicando que este método será responsável por criar e configurar um RabbitTemplate utilizado para interagir com o RabbitMQ.

Agora vamos criar a classe que vai ser responsável por enviar uma mensagem para o tópico

package br.com.virandoprogramador.listener

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class Sender {

    private final RabbitTemplate rabbitTemplate;

    @Autowired
    public Sender(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, RabbitMQConfig.ROUTING_KEY, message);
        System.out.println("Mensagem enviada: " + message);
    }
}

Este método é responsável por enviar mensagens para o RabbitMQ. Ele recebe uma mensagem como parâmetro e utiliza o método convertAndSend() do RabbitTemplate para publicar a mensagem na troca (exchange) especificada (RabbitMQConfig.EXCHANGE_NAME) e com a chave de roteamento especificada (RabbitMQConfig.ROUTING_KEY).

Agora que já temos uma classe que envia mensagem para o tópico, precisamos criar uma outra configuração que seria o serviço que escuta a fila:

package br.com.virandoprogramador.listener

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class Receiver {

    @RabbitListener(queues = RabbitMQConfig.QUEUE_NAME)
    public void receiveMessage(String message) {
        System.out.println("Mensagem recebida: " + message);
    }
}

O método receiveMessage() é anotado com @RabbitListener. Essa anotação indica ao Spring que esse método deve ser acionado sempre que uma mensagem for recebida na fila específica definida na anotação (no caso, RabbitMQConfig.QUEUE_NAME). o nome da sua queue que você configurou.

Por fim não se esqueça de realizar as configurações no seu arquivo Properties, definindo exatamente os parâmetros de conexão com seu RabbitMQ, seja ele instalado localmente ou em um container Docker.

# Configurações de conexão com o RabbitMQ
spring.rabbitmq.host=  seu_host_do_rabbitmq
spring.rabbitmq.port=  sua_porta_do_rabbitmq
spring.rabbitmq.username=  seu_usuario_do_rabbitmq
spring.rabbitmq.password=  sua_senha_do_rabbitmq

Encerramento sobre o assunto

O RabbitMQ é um poderoso e flexível sistema de mensageria de código aberto, altamente confiável e escalável, que facilita a comunicação assíncrona entre diferentes partes de um sistema distribuído. Ele desempenha um papel bem importante na construção de arquiteturas de aplicativos modernas, permitindo a troca de mensagens entre componentes de forma eficiente e confiável.

Com sua flexibilidade sendo um dos pontos mais chamativos dele, varias tecnologias além do Java tem suporte para utilizar esse sistema de mensageria.

4.5/5 - (2 votes)
Compartilhar:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *