Courses/C#/Final Projects/E-Commerce Microservices
    ๐Ÿ›’

    E-Commerce Microservices

    Expert Project โ€” gRPC, MassTransit, Saga Pattern, Docker

    ๐Ÿง  Project Overview

    Build a distributed e-commerce system with three microservices communicating via gRPC (sync) and MassTransit/RabbitMQ (async). Practice the saga pattern for distributed transactions.

    ๐ŸŽฏ Requirements

    • โ€ข Product Service: CRUD + gRPC for inter-service queries
    • โ€ข Order Service: Create orders, validate products via gRPC
    • โ€ข Inventory Service: Reserve stock on order creation via messaging
    • โ€ข Event-driven saga: OrderCreated โ†’ StockReserved โ†’ OrderConfirmed
    • โ€ข Compensating events for failures (StockReservationFailed โ†’ OrderCancelled)
    • โ€ข Docker Compose for all services + RabbitMQ

    Step 1: Product Service (gRPC + REST)

    Product Service โ€” Minimal API + gRPC

    Expose products via REST for clients and gRPC for inter-service calls.

    Try it Yourself ยป
    C#
    // ProductService/Program.cs โ€” Minimal API
    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddDbContext<ProductDbContext>(o =>
        o.UseNpgsql(builder.Configuration.GetConnectionString("Products")));
    builder.Services.AddGrpc();
    
    var app = builder.Build();
    app.MapGrpcService<ProductGrpcService>();
    
    // Minimal API endpoints for REST clients
    app.MapGet("/api/products", async (ProductDbContext db) =>
        await db.Products.Where(p => p.IsActive).ToListAsync());
    
    app.MapGet("/api/pr
    ...

    Step 2: Order Service

    Order Service โ€” gRPC Client + Event Publishing

    Validate products via gRPC and publish OrderCreated events.

    Try it Yourself ยป
    C#
    // OrderService/Handlers/CreateOrderHandler.cs
    using MassTransit;
    
    public class CreateOrderHandler
    {
        private readonly OrderDbContext _db;
        private readonly ProductService.ProductServiceClient _products;
        private readonly IPublishEndpoint _publisher;
    
        public CreateOrderHandler(OrderDbContext db,
            ProductService.ProductServiceClient products,
            IPublishEndpoint publisher)
        {
            _db = db;
            _products = products;
            _publisher = publisher;
        }
    
        pub
    ...

    Step 3: Inventory Consumer (Saga)

    Inventory Consumer โ€” Stock Reservation Saga

    Reserve stock atomically and publish success/failure events.

    Try it Yourself ยป
    C#
    // InventoryService/Consumers/OrderCreatedConsumer.cs
    using MassTransit;
    
    public class OrderCreatedConsumer : IConsumer<OrderCreatedEvent>
    {
        private readonly InventoryDbContext _db;
        private readonly ILogger<OrderCreatedConsumer> _logger;
        private readonly IPublishEndpoint _publisher;
    
        public OrderCreatedConsumer(InventoryDbContext db,
            ILogger<OrderCreatedConsumer> logger,
            IPublishEndpoint publisher)
        {
            _db = db; _logger = logger; _publisher = publisher;
    
    ...

    Challenge Complete Checklist

    • โ˜ All three services run independently
    • โ˜ Product queries work via both REST and gRPC
    • โ˜ Order creation triggers stock reservation via messaging
    • โ˜ Failed reservations trigger compensating events
    • โ˜ Docker Compose starts all services + RabbitMQ
    Back to Projects

    Cookie & Privacy Settings

    We use cookies to improve your experience, analyze traffic, and show personalized ads. You can manage your preferences below.

    By clicking "Accept All", you consent to our use of cookies for analytics and personalized advertising. You can customize your preferences or reject non-essential cookies.

    Privacy Policy โ€ข Terms of Service