Microsserviços em C#: arquitetura e prática do A ao Z

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução aos microsserviços em C#

\n

A arquitetura de microsserviços tornou-se o padrão de facto para construir aplicações complexas, escaláveis e tolerantes a falhas. Ao contrário do monolito, onde todo o código é unificado em um único processo, os microsserviços dividem o sistema em serviços pequenos e implantados de forma independente. A plataforma .NET (C#) fornece todas as ferramentas necessárias para criar microsserviços profissionais: desde ASP.NET Core para APIs web até bibliotecas para trabalhar com filas, conteinerização e orquestração.

\n

Neste artigo, abordaremos o caminho completo desde o design da arquitetura até a implementação prática de um microsserviço em C# com exemplos de código.

\n\n

1. Fundamentos da arquitetura de microsserviços

\n

Princípios e antipadrões

\n

Antes de escrever código, é importante entender os princípios-chave:

\n
    \n
  • Responsabilidade Única (SRP): Cada serviço é responsável por uma função de negócio (ex: serviço de pedidos, serviço de pagamento).
  • \n
  • Baixo acoplamento: Os serviços comunicam-se pela rede (HTTP, gRPC, filas) e não conhecem a estrutura interna uns dos outros.
  • \n
  • Implantação independente: Você pode atualizar um serviço sem parar os outros.
  • \n
  • Descentralização de dados: Cada serviço possui seu próprio banco de dados (Database per Service).
  • \n
\n

Antipadrões a evitar: serviços muito pequenos (nanoservices), banco de dados compartilhado, cadeias síncronas de chamadas (chattiness).

\n\n

Comunicação entre serviços

\n

Para a interação de microsserviços em C#, são utilizados:

\n
    \n
  • Síncrona: REST API (HTTP/JSON) ou gRPC (protocolo binário, mais rápido).
  • \n
  • Assíncrona: Filas de mensagens (RabbitMQ, Azure Service Bus, Kafka) — método preferido para baixo acoplamento.
  • \n
\n\n

2. Implementação prática de um microsserviço em C#

\n

Exemplo: Serviço de gerenciamento de pedidos

\n

Vamos criar um microsserviço simples em ASP.NET Core 8. Usaremos Clean Architecture para separar as camadas.

\n\n

Passo 1: Projeto e estrutura

\n
dotnet new webapi -n OrderService\ncd OrderService
\n

Crie as pastas: Controllers, Models, Services, Data.

\n\n

Passo 2: Modelo de dados

\n
// Models/Order.cs\npublic class Order\n{\n    public int Id { get; set; }\n    public string CustomerName { get; set; }\n    public decimal TotalAmount { get; set; }\n    public DateTime CreatedAt { get; set; }\n}
\n\n

Passo 3: Contexto do banco de dados (Entity Framework Core)

\n
// Data/OrderDbContext.cs\npublic class OrderDbContext : DbContext\n{\n    public OrderDbContext(DbContextOptions<OrderDbContext> options) : base(options) { }\n    public DbSet<Order> Orders { get; set; }\n}
\n\n

Passo 4: Camada de serviço

\n
// Services/IOrderService.cs\npublic interface IOrderService\n{\n    Task<Order> CreateOrderAsync(Order order);\n    Task<List<Order>> GetAllOrdersAsync();\n}\n\n// Services/OrderService.cs\npublic class OrderService : IOrderService\n{\n    private readonly OrderDbContext _context;\n    public OrderService(OrderDbContext context)\n    {\n        _context = context;\n    }\n\n    public async Task<Order> CreateOrderAsync(Order order)\n    {\n        _context.Orders.Add(order);\n        await _context.SaveChangesAsync();\n        return order;\n    }\n\n    public async Task<List<Order>> GetAllOrdersAsync()\n    {\n        return await _context.Orders.ToListAsync();\n    }\n}
\n\n

Passo 5: Controlador

\n
// Controllers/OrdersController.cs\n[ApiController]\n[Route("api/[controller]")]\npublic class OrdersController : ControllerBase\n{\n    private readonly IOrderService _orderService;\n    public OrdersController(IOrderService orderService)\n    {\n        _orderService = orderService;\n    }\n\                

Blogs

Book Recommendations