Você já utilizou ActiveMQ com Spring Boot em algum projeto? este broker é um poderoso sistema de mensagens de código aberto que fornece uma infraestrutura flexível e escalável para a comunicação entre diferentes aplicações. Baseado no protocolo Java Message Service (JMS), o ActiveMQ facilita a troca de mensagens entre componentes de software de forma assíncrona, confiável e eficiente.
Uma das principais características do ActiveMQ é sua capacidade de suportar uma variedade de padrões de integração, incluindo mensagens ponto a ponto, publish-subscribe (publicar e assinar) e filas de mensagens.
Isso permite que as aplicações se comuniquem de maneira flexível, independentemente de estarem distribuídas em diferentes plataformas, linguagens de programação ou localizações geográficas.
![activemq com spring boot](https://virandoprogramador.com.br/wp-content/uploads/2023/11/activemq-com-spring-boot-1024x683.jpg)
Passos de instalação do Apache ActiveMQ:
Antes de iniciar as configurações do projeto Spring Boot, precisamos baixar o ActiveMQ em nossa máquina, podemos baixar de 2 formas, pelo site oficinal do ActiveMQ ou se preferir vamos baixar uma imagem diretamente pelo Docker, seguindo os passos a seguir:
1. Baixar e executar o contêiner do ActiveMQ:
Abra um terminal ou prompt de comando e execute o seguinte comando para baixar e iniciar o contêiner do ActiveMQ:
docker run -p 61616:61616 -p 8161:8161 --name activemq webcenter/activemq:latest
- -p 61616:61616: Mapeia a porta padrão do ActiveMQ para que seja acessível do host. A porta 61616 é a porta padrão para conexões JMS.
- -p 8161:8161: Mapeia a porta do console web administrativo para acesso via navegador.
- –name activemq: Define um nome para o contêiner (neste caso, “activemq”).
- webcenter/activemq:latest: Especifica a imagem Docker usada para criar o contêiner. Esta é a imagem oficial do ActiveMQ mantida pelo Webcenter.
2. Acesso ao console Administrativo
Após executar o contêiner, você pode acessar o console administrativo do ActiveMQ no navegador da web digitando o seguinte endereço: http://localhost:8161/admin.
Use as credenciais padrão:
- Usuário: admin
- Senha: admin
Você irá se deparar com a pagina Home do ActiveMQ:
![activemq com spring boot](https://virandoprogramador.com.br/wp-content/uploads/2023/12/activemq-s.jpg)
Passo 3: Configurar e Usar o ActiveMQ com Java
Adicionar dependência Maven
Se você estiver usando Maven, adicione a dependência do ActiveMQ ao seu arquivo pom.xml
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.16.3</version> </dependency>
Com a dependência geral em nosso projeto, precisamos criar um produtor de mensagens simples que enviará mensagens para uma fila do ActiveMQ:
package br.com.virandoprogramador.activemq import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class MessageProducer { public static void main(String[] args) throws JMSException { // Conexão com o ActiveMQ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); Connection connection = connectionFactory.createConnection(); connection.start(); // Criação de uma sessão Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // Criação de uma fila de destino Destination destination = session.createQueue("QUEUE.NAME"); // Criação de um produtor MessageProducer producer = session.createProducer(destination); // Criação e envio de uma mensagem TextMessage message = session.createTextMessage("Teste MSG - Virando Programador"); producer.send(message); // Fechamento das conexões session.close(); connection.close(); } }
A classe MessageProducer é utilizada para enviar mensagens para um destino específico (como uma fila ou um tópico) em um sistema de mensageria baseado em JMS (Java Message Service). Ela desempenha um papel fundamental na comunicação entre aplicações através do envio de mensagens para o Apache ActiveMQ ou outros sistemas de mensageria que seguem o padrão JMS.
Após enviar todas as mensagens desejadas, é uma boa prática fechar a sessão e a conexão com o sistema de mensageria utilizando os métodos close() da sessão e da conexão, para liberar os recursos adequadamente.
Agora vamos criar a classe para consumir a mensagem:
package br.com.virandoprogramador.activemq import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class MessageConsumer { public static void main(String[] args) throws JMSException { // Conexão com o ActiveMQ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); Connection connection = connectionFactory.createConnection(); connection.start(); // Criação de uma sessão Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // Criação de uma fila de destino Destination destination = session.createQueue("QUEUE.NAME"); // Criação de um consumidor MessageConsumer consumer = session.createConsumer(destination); // Recebimento e processamento de mensagens Message message = consumer.receive(); if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; System.out.println("Mensagem recebida: " + textMessage.getText()); } // Fechamento das conexões session.close(); connection.close(); } }
Encerramento sobre o assunto
Em resumo, o ActiveMQ opera utilizando filas (queues) e tópicos (topics) para o envio e recebimento de mensagens, seguindo o modelo ponto a ponto e o modelo publish-subscribe (publicar e assinar), respectivamente.