Em arquiteturas modernas orientadas a eventos, o uso de mensageria assíncrona é uma prática essencial. Uma das soluções mais conhecidas é o Apache ActiveMQ, um broker de mensagens robusto, open-source e com suporte ao protocolo JMS.
Neste artigo, você aprenderá como configurar e consumir mensagens do ActiveMQ com aplicações .NET modernas, utilizando a biblioteca Apache.NMS.ActiveMQ.
🧱 Por que usar o ActiveMQ?
- Suporte a diversos protocolos: OpenWire, STOMP, MQTT, AMQP
- Alta disponibilidade e confiabilidade
- Gerenciamento via Web Console
- Ideal para ambientes legados e também modernos
🧰 Tecnologias Utilizadas
- .NET 8 (Console App)
- Apache ActiveMQ 5.x (Docker)
- Apache.NMS.ActiveMQ (NuGet)
- Docker Compose
🐳 Subindo o ActiveMQ com Docker
Crie um arquivo docker-compose.yml:
version: '3.8' services: activemq: image: rmohr/activemq:5.18.3 container_name: activemq ports: - "61616:61616" # TCP (OpenWire) - "8161:8161" # Web UI environment: ACTIVEMQ_ADMIN_LOGIN: admin ACTIVEMQ_ADMIN_PASSWORD: admin Suba com:
docker-compose up -d 🧪 Acessando o Painel Web
Acesse:
📍 http://localhost:8161
Usuário: admin
Senha: admin
⚙️ Instalando a Biblioteca no .NET
Crie o projeto:
dotnet new console -n ActiveMqExample cd ActiveMqExample Adicione o pacote:
dotnet add package Apache.NMS.ActiveMQ ✉️ Enviando Mensagens
using Apache.NMS; using Apache.NMS.ActiveMQ; var factory = new ConnectionFactory("tcp://localhost:61616"); using var connection = factory.CreateConnection(); connection.Start(); using var session = connection.CreateSession(); IDestination destination = session.GetQueue("demo.queue"); using var producer = session.CreateProducer(destination); var message = session.CreateTextMessage("Olá, ActiveMQ!"); producer.Send(message); Console.WriteLine("Mensagem enviada com sucesso!"); 📥 Consumindo Mensagens
using Apache.NMS; using Apache.NMS.ActiveMQ; var factory = new ConnectionFactory("tcp://localhost:61616"); using var connection = factory.CreateConnection(); connection.Start(); using var session = connection.CreateSession(); IDestination destination = session.GetQueue("demo.queue"); using var consumer = session.CreateConsumer(destination); var message = consumer.Receive(TimeSpan.FromSeconds(10)) as ITextMessage; if (message != null) { Console.WriteLine($"Mensagem recebida: {message.Text}"); } else { Console.WriteLine("Nenhuma mensagem recebida."); } 🛠 Boas Práticas
- Crie projetos separados para produtores e consumidores
- Utilize
ReceiveAsynccom listener para alta performance - Trate reconexões automáticas
- Use transações ou acknowledgments quando necessário
🧠 Quando Usar ActiveMQ?
| Caso de Uso | Recomendado? |
|---|---|
| Integração de sistemas legados (Java) | ✅ Sim |
| Sistemas com comunicação via JMS | ✅ Sim |
| Alternativa moderna (Rabbit/Kafka) | ⚠️ Depende |
| Alta taxa de mensagens e streaming | ❌ Prefira Kafka |
🤝 Conecte-se Comigo
Estou sempre aberto a trocar ideias sobre arquitetura, mensageria, .NET e sistemas distribuídos. Vamos nos conectar:
- 💻 Dev.to
- ✍️ Medium
- 📬 contato@dopme.io
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.