Skip to content

🚀 Worker Service .NET para processamento assíncrono de mensagens CRM via RabbitMQ. Implementa OpenTelemetry, Circuit Breaker e Health Checks. Sistema robusto para integração de dados com monitoramento em tempo real.

License

Notifications You must be signed in to change notification settings

NeemiasBorges/RabbitMQ-CRMtoNFe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐰 RabbitMQ-CRM-Worker

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.

📋 Descrição

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.

🚀 Começando

Pré-requisitos

  • .NET 9.0
  • RabbitMQ Server 3.12 ou superior
  • Docker
  • Visual Studio 2022 ou VS Code

🔧 Instalação

  1. Clone o repositório
git clone https://github.com/NeemiasBorges/RabbitMQ-CRMtoNFe.git
  1. Restaure os pacotes NuGet
dotnet restore
  1. Instalar Docker
  • Se ainda não tiver o Docker instalado, você pode baixá-lo e instalá-lo através do site oficial: Docker Download.
  1. Rodar RabbitMQ com Docker
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
  1. Acessar o Painel de Administração do RabbitMQ
  1. 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"
  }
}

⚙️ Configurações

Dependências NuGet

<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" />

Estrutura do Projeto

├── 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

🔄 Fluxo de Mensagens

Fluxo de Mensagens

O diagrama acima ilustra o fluxo de mensagens em nossa arquitetura:

  1. O Producer publica mensagens em filas específicas
  2. O Consumer CRM processa mensagens relacionadas ao CRM
  3. O Consumer NFE processa mensagens relacionadas a Notas Fiscais

Estrutura de Filas

  • fila.crm: Processa mensagens relacionadas ao CRM
  • fila.nfe: Processa mensagens relacionadas a Notas Fiscais

Filas

📊 Monitoramento e Telemetria

Logs e Métricas

O serviço utiliza uma combinação de Serilog e OpenTelemetry para fornecer visibilidade operacional:

Logs (Serilog)

  • 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 (OpenTelemetry)

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

Endpoints de Monitoramento

  1. Dashboard de Métricas

    http://localhost:5000/metrics-dashboard
    

    Filas

    • 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
  2. API de Métricas

    http://localhost:5000/metrics-api
    

    Filas

    • Dados brutos em formato JSON
    • Ideal para integração com outras ferramentas
  3. Documentação API

    http://localhost:5000/swagger
    
    • Documentação interativa Swagger
    • Teste de endpoints
    • Descrição dos recursos disponíveis
  4. Health Check

    http://localhost:5000/health
    

    Filas

    • Status de saúde do serviço
    • Verificações de dependências

Resiliência

Implementa:

  • Circuit Breaker
  • Retry Policies
  • Tratamento de falhas

🛠️ Desenvolvimento

Build

dotnet build

📦 Deploy

Como Serviço Windows

sc.exe create "RabbitMQ CRM Worker" binpath="caminho-do-exe"

Como Serviço Linux

sudo systemctl enable rabbitmq-crm-worker
sudo systemctl start rabbitmq-crm-worker

📝 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

👥 Autor

Licença 📄

Licença MIT

Contato 📧

neemiasb.dev@gmail.com

About

🚀 Worker Service .NET para processamento assíncrono de mensagens CRM via RabbitMQ. Implementa OpenTelemetry, Circuit Breaker e Health Checks. Sistema robusto para integração de dados com monitoramento em tempo real.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages