Um serviço Worker em .NET que gerencia o processamento assíncrono de mensagens para integração com CRM e NFe, utilizando RabbitMQ como message broker. Implementa padrões de resiliência, telemetria e monitoramento.
Sistema de processamento assíncrono que consome mensagens de filas RabbitMQ para integração com CRM e NFe. Utiliza padrões modernos de desenvolvimento como Circuit Breaker, OpenTelemetry e Health Checks.
- .NET 9.0
- RabbitMQ Server 3.12 ou superior
- Docker
- Visual Studio 2022 ou VS Code
- Clone o repositório
git clone https://github.com/NeemiasBorges/RabbitMQ-CRMtoNFe.git
- Restaure os pacotes NuGet
dotnet restore
- Instalar Docker
- Se ainda não tiver o Docker instalado, você pode baixá-lo e instalá-lo através do site oficial: Docker Download.
- Rodar RabbitMQ com Docker
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
- Acessar o Painel de Administração do RabbitMQ
- URL: http://localhost:15672
- Usuário: guest
- Senha: guest
- Configure os appsettings.json
6.1 Producer:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"RabbitMQ": {
"QueueCrm": "fila.crm",
"QueueNfe": "fila.nfe",
"RoutingKeyCrm": "rk.crm",
"RoutingKeyNfe": "rk.nfe"
}
}
6.2 Consumer CRM:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"RabbitMQ": {
"Queue": "fila.crm",
"RoutingKey": "crm"
}
}
6.3 Consumer CRM:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"RabbitMQ": {
"Queue": "fila.nfe",
"RoutingKey": "nfe"
}
}
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.7.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.7.0" />
<PackageReference Include="Serilog" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="5.0.1" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.0" />
├── WS_ClienteProducer/
│ ├── Connected Services/
│ ├── Dependências/
│ ├── Properties/
│ ├── DTO/
│ │ └── CostumerDTO.cs
│ ├── logs/
│ ├── Services/
│ │ └── RabbitMQ/
│ ├── appsettings.json
│ ├── Program.cs
│ └── Worker.cs
├── WS_Consumer_CRM/
│ ├── Connected Services/
│ ├── Dependências/
│ ├── Properties/
│ ├── DTO/
│ │ └── CostumerDTO.cs
│ ├── appsettings.json
│ ├── Program.cs
│ └── Worker.cs
└── WS_Consumer_NFE/
├── Connected Services/
├── Dependências/
├── Properties/
├── DTO/
│ └── CostumerDTO.cs
├── appsettings.json
├── Program.cs
└── Worker.cs
O diagrama acima ilustra o fluxo de mensagens em nossa arquitetura:
- O Producer publica mensagens em filas específicas
- O Consumer CRM processa mensagens relacionadas ao CRM
- O Consumer NFE processa mensagens relacionadas a Notas Fiscais
fila.crm
: Processa mensagens relacionadas ao CRMfila.nfe
: Processa mensagens relacionadas a Notas Fiscais
O serviço utiliza uma combinação de Serilog e OpenTelemetry para fornecer visibilidade operacional:
- Localização:
/logs/worker-{data}.log
- Formato: Logs estruturados com informações de:
- Ambiente
- Nome da máquina
- Nível de log (Information, Warning, Error, etc.)
- Timestamp
- Mensagem detalhada
Métricas básicas do runtime são coletadas e disponibilizadas, incluindo:
- Uso de memória
- Tempo de execução
- Eventos do runtime .NET
- Taxa de processamento de mensagens
- Latência de processamento
- Erros por minuto
-
Dashboard de Métricas
http://localhost:5000/metrics-dashboard
- Interface visual com gráficos em tempo real
- Métricas de uso de memória
- Contadores de mensagens processadas
- Tempo de atividade do serviço
-
API de Métricas
http://localhost:5000/metrics-api
- Dados brutos em formato JSON
- Ideal para integração com outras ferramentas
-
Documentação API
http://localhost:5000/swagger
- Documentação interativa Swagger
- Teste de endpoints
- Descrição dos recursos disponíveis
-
Health Check
http://localhost:5000/health
- Status de saúde do serviço
- Verificações de dependências
Implementa:
- Circuit Breaker
- Retry Policies
- Tratamento de falhas
dotnet build
sc.exe create "RabbitMQ CRM Worker" binpath="caminho-do-exe"
sudo systemctl enable rabbitmq-crm-worker
sudo systemctl start rabbitmq-crm-worker
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Licença MIT