Este projeto implementa o padrão Producer-Consumer (Produtor-Consumidor), demonstrando a comunicação assíncrona entre processos através de filas de mensagens. O sistema é composto por dois módulos principais que trabalham de forma independente para simular um ambiente de processamento distribuído.
- Implementar o padrão arquitetural Producer-Consumer
- Demonstrar comunicação assíncrona entre processos
- Aplicar conceitos de concorrência e sincronização
- Gerenciar filas de mensagens de forma eficiente
- Tratar cenários de alta disponibilidade e tolerância a falhas
┌─────────────────┐ 📨 Mensagens ┌─────────────────┐
│ │ ──────────────────► │ │
│ PRODUTOR │ │ CONSUMIDOR │
│ │ │ │
│ - Gera dados │ │ - Processa dados│
│ - Envia msgs │ │ - Executa ações │
└─────────────────┘ └─────────────────┘
Atividade02/
├── Trabalho02Produtor/ # Módulo Produtor
│ ├── src/ # Código fonte do produtor
│ ├── config/ # Configurações
│ └── requirements.txt # Dependências
├── Trabalho02Consumidor/ # Módulo Consumidor
│ ├── src/ # Código fonte do consumidor
│ ├── config/ # Configurações
│ └── requirements.txt # Dependências
└── README.md # Este arquivo
- ✅ Geração automática de mensagens
- ✅ Envio para fila de mensagens
- ✅ Controle de rate limiting
- ✅ Logging detalhado de operações
- ✅ Tratamento de erros de conectividade
- ✅ Consumo contínuo de mensagens
- ✅ Processamento assíncrono
- ✅ Confirmação de recebimento (ACK)
- ✅ Retry automático em caso de falha
- ✅ Métricas de performance
- Linguagem: [Python/Java/Node.js]
- Message Broker: [RabbitMQ/Apache Kafka/Redis]
- Bibliotecas:
- [pika/amqp] - Comunicação com message broker
- [json/pickle] - Serialização de dados
- [logging] - Sistema de logs
- [threading/asyncio] - Programação concorrente
- [Linguagem] versão X.X+
- Message Broker instalado e configurado
- Dependências listadas em requirements.txt
git clone https://github.com/RGPaix/Atividade02.git
cd Atividade02# Para RabbitMQ (exemplo)
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
# Para outros brokers, seguir documentação específicacd Trabalho02Produtor
pip install -r requirements.txtcd ../Trabalho02Consumidor
pip install -r requirements.txtTerminal 1 - Iniciar Consumidor:
cd Trabalho02Consumidor
python main.pyTerminal 2 - Iniciar Produtor:
cd Trabalho02Produtor
python main.pyO sistema inclui métricas de:
- Taxa de produção de mensagens
- Taxa de consumo de mensagens
- Latência média de processamento
- Número de mensagens na fila
- Erros e reprocessamentos
Para executar os testes:
# Testes do Produtor
cd Trabalho02Produtor
python -m pytest tests/
# Testes do Consumidor
cd Trabalho02Consumidor
python -m pytest tests/Ambos os módulos podem ser configurados através de arquivos de configuração:
config.json
{
"broker_url": "amqp://localhost:5672",
"queue_name": "task_queue",
"retry_attempts": 3,
"batch_size": 100
}- Processamento de dados em lote
- Sistema de notificações
- Pipeline de ETL (Extract, Transform, Load)
- Processamento de imagens/arquivos
- Sistema de pedidos e-commerce
- Conexão perdida: Reconexão automática
- Mensagem inválida: Log do erro e descarte
- Falha no processamento: Reenvio para fila de retry
- Sobrecarga do sistema: Controle de backpressure
- Interface web para monitoramento
- Balanceamento de carga automático
- Persistência de mensagens
- Métricas em tempo real
- Deploy com Docker Compose
Desenvolvido por: @RGPaix
Disciplina: Sistemas Distribuídos / Programação Concorrente
Tema: Implementação do Padrão Producer-Consumer
- Documentação RabbitMQ para Java
- Padrões de Mensageria
- Java Concurrency in Practice
- Apache Maven Guide
Estrutura básica do Producer:
public class Producer {
private static final String QUEUE_NAME = "task_queue";
public static void main(String[] args) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello World!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
}
}
}- GitHub: @RGPaix
- Issues: Reportar problemas
⭐ Observação: Este projeto demonstra conceitos fundamentais de sistemas distribuídos e pode ser usado como base para implementações mais complexas em ambiente de produção.