Microservices āļ”āđ‰āļ§āļĒ NestJS āļ›āļĩ 2026: āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄ, gRPC āđāļĨāļ°āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™

āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒāđ€āļĢāļ·āđˆāļ­āļ‡āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄ NestJS Microservices āļāļąāļš gRPC: transport layer, Protocol Buffers, streaming patterns āđāļĨāļ°āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™āļŠāļģāļŦāļĢāļąāļš backend engineer āļ›āļĩ 2026

āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄ NestJS Microservices āļāļąāļš gRPC

Microservices Architecture āļāļąāļš NestJS āđƒāļ™āļ›āļĩ 2026 āļ–āļ·āļ­āđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™āļŦāļąāļ§āļ‚āđ‰āļ­āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļ„āļ§āļēāļĄāļ™āļīāļĒāļĄāļ­āļĒāđˆāļēāļ‡āļĄāļēāļāđƒāļ™āļ§āļ‡āļāļēāļĢāļžāļąāļ’āļ™āļēāļ‹āļ­āļŸāļ•āđŒāđāļ§āļĢāđŒ NestJS āđ„āļ”āđ‰āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™ Framework āļŠāļąāđ‰āļ™āļ™āļģāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļāļąāđˆāļ‡ Server āļ”āđ‰āļ§āļĒ Node.js āđ‚āļ”āļĒāđ€āļ‰āļžāļēāļ°āļ­āļĒāđˆāļēāļ‡āļĒāļīāđˆāļ‡āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļĢāļ°āļšāļš Microservices āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ„āļ§āļēāļĄāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™āđāļĨāļ°āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļ‚āļĒāļēāļĒāļ•āļąāļ§ āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āļˆāļ°āļ™āļģāđ€āļŠāļ™āļ­āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāļ‚āļ­āļ‡ NestJS Microservices āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ gRPC āļĢāļ§āļĄāļ–āļķāļ‡āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™āļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒāđƒāļ™āļ›āļĩ 2026

gRPC āđ€āļ—āļĩāļĒāļšāļāļąāļš REST āđƒāļ™āļĢāļ°āļšāļš Microservices

gRPC āđƒāļŦāđ‰āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ—āļĩāđˆāļŠāļđāļ‡āļāļ§āđˆāļē REST āļ­āļĒāđˆāļēāļ‡āļĄāļēāļāđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđƒāļŠāđ‰ Protocol Buffers āđāļ—āļ™ JSON āđāļĨāļ°āļĢāļ­āļ‡āļĢāļąāļš HTTP/2 āļ‹āļķāđˆāļ‡āļŠāđˆāļ§āļĒāļĨāļ” Latency āđāļĨāļ°āđ€āļžāļīāđˆāļĄ Throughput āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡ Services āļ āļēāļĒāđƒāļ™āļĢāļ°āļšāļš āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄ REST āļĒāļąāļ‡āļ„āļ‡āđ€āļŦāļĄāļēāļ°āļŠāļĄāļŠāļģāļŦāļĢāļąāļš Public API āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ„āļ§āļēāļĄāļ‡āđˆāļēāļĒāđƒāļ™āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™

NestJS Microservices Transport Layer Architecture

NestJS āļĢāļ­āļ‡āļĢāļąāļš Transport Layer āļŦāļĨāļēāļĒāļ›āļĢāļ°āđ€āļ āļ—āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡ Microservices āđ„āļ”āđ‰āđāļāđˆ TCP, Redis, NATS, RabbitMQ, Kafka āđāļĨāļ° gRPC āđāļ•āđˆāļĨāļ° Transport āļĄāļĩāļ‚āđ‰āļ­āļ”āļĩāđāļĨāļ°āļ‚āđ‰āļ­āđ€āļŠāļĩāļĒāļ—āļĩāđˆāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™ āļāļēāļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļ‚āļķāđ‰āļ™āļ­āļĒāļđāđˆāļāļąāļšāļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ‚āļ­āļ‡āļĢāļ°āļšāļš

āļŦāļąāļ§āđƒāļˆāļŠāļģāļ„āļąāļāļ‚āļ­āļ‡ NestJS Microservices āļ­āļĒāļđāđˆāļ—āļĩāđˆāļāļēāļĢāđƒāļŠāđ‰ Decorator āļŠāļ­āļ‡āļ•āļąāļ§āļŦāļĨāļąāļ āđ„āļ”āđ‰āđāļāđˆ @MessagePattern āđāļĨāļ° @EventPattern āļ‹āļķāđˆāļ‡āļĄāļĩāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™āļ”āļąāļ‡āļ™āļĩāđ‰:

  • @MessagePattern āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļĢāļđāļ›āđāļšāļš Request-Response āļ—āļĩāđˆāļœāļđāđ‰āđ€āļĢāļĩāļĒāļāļ•āđ‰āļ­āļ‡āļāļēāļĢāļĢāļ­āļĢāļąāļšāļœāļĨāļĨāļąāļžāļ˜āđŒāļāļĨāļąāļšāļĄāļē
  • @EventPattern āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļĢāļđāļ›āđāļšāļš Fire-and-Forget āļ—āļĩāđˆāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļœāļĨāļĨāļąāļžāļ˜āđŒāļāļĨāļąāļš āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļš Event-Driven Architecture

āđƒāļ™ NestJS āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™ 11 āļĄāļĩāļāļēāļĢāđ€āļžāļīāđˆāļĄ Method unwrap() āļ‹āļķāđˆāļ‡āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Error āļˆāļēāļ Microservices āļ—āļģāđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™ āđ‚āļ”āļĒ unwrap() āļˆāļ°āđāļ›āļĨāļ‡ RpcException āđƒāļŦāđ‰āđ€āļ›āđ‡āļ™ Native Error āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ– Catch āđ„āļ”āđ‰āđƒāļ™āļāļąāđˆāļ‡ Client

orders.controller.tstypescript
import { Controller } from '@nestjs/common';
import { MessagePattern, EventPattern, Payload } from '@nestjs/microservices';
import { OrdersService } from './orders.service';
import { CreateOrderDto } from './dto/create-order.dto';

@Controller()
export class OrdersController {
  constructor(private readonly ordersService: OrdersService) {}

  // Request-response: caller waits for the created order
  @MessagePattern('order.create')
  async createOrder(@Payload() data: CreateOrderDto) {
    return this.ordersService.create(data);
  }

  // Event-based: fire and forget, no response returned
  @EventPattern('order.shipped')
  async handleOrderShipped(@Payload() data: { orderId: string }) {
    await this.ordersService.markAsShipped(data.orderId);
  }
}

āļāļēāļĢāļ­āļ­āļāđāļšāļš Controller āđƒāļ™āļĨāļąāļāļĐāļ“āļ°āļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āđāļĒāļāļ„āļ§āļēāļĄāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļŠāļąāļ”āđ€āļˆāļ™ Method āļ—āļĩāđˆāđƒāļŠāđ‰ @MessagePattern āļˆāļ° Return āļ„āđˆāļēāļāļĨāļąāļšāđ„āļ›āļĒāļąāļ‡āļœāļđāđ‰āđ€āļĢāļĩāļĒāļ āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆ Method āļ—āļĩāđˆāđƒāļŠāđ‰ @EventPattern āļˆāļ°āļ—āļģāļ‡āļēāļ™āđāļšāļš Asynchronous āđ‚āļ”āļĒāđ„āļĄāđˆāļĄāļĩāļāļēāļĢāļŠāđˆāļ‡āļ„āđˆāļēāļāļĨāļąāļš

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē gRPC āđ€āļ›āđ‡āļ™ NestJS Microservice Transport

gRPC āđ€āļ›āđ‡āļ™ Remote Procedure Call Framework āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāđ‚āļ”āļĒ Google āļ‹āļķāđˆāļ‡āđƒāļŠāđ‰ Protocol Buffers āđ€āļ›āđ‡āļ™āļĢāļđāļ›āđāļšāļšāđƒāļ™āļāļēāļĢ Serialize āļ‚āđ‰āļ­āļĄāļđāļĨ āļāļēāļĢāđƒāļŠāđ‰ gRPC āļāļąāļš NestJS āļ•āđ‰āļ­āļ‡āđ€āļĢāļīāđˆāļĄāļˆāļēāļāļāļēāļĢāļāļģāļŦāļ™āļ” Service Definition āđƒāļ™āđ„āļŸāļĨāđŒ .proto

proto/users.protoprotobuf
syntax = "proto3";

package users;

service UsersService {
  rpc FindOne (UserById) returns (User);
  rpc FindMany (UserFilter) returns (stream User);
}

message UserById {
  string id = 1;
}

message UserFilter {
  string role = 1;
  int32 limit = 2;
}

message User {
  string id = 1;
  string email = 2;
  string name = 3;
  string role = 4;
}

āđ„āļŸāļĨāđŒ .proto āļ™āļĩāđ‰āļāļģāļŦāļ™āļ” Service āļŠāļ·āđˆāļ­ UsersService āļ—āļĩāđˆāļĄāļĩ Method āļŠāļ­āļ‡āļ•āļąāļ§ āđ„āļ”āđ‰āđāļāđˆ FindOne āļŠāļģāļŦāļĢāļąāļšāļ„āđ‰āļ™āļŦāļēāļœāļđāđ‰āđƒāļŠāđ‰āļ•āļēāļĄ ID āđāļĨāļ° FindMany āļŠāļģāļŦāļĢāļąāļšāļ„āđ‰āļ™āļŦāļēāļœāļđāđ‰āđƒāļŠāđ‰āļŦāļĨāļēāļĒāļ„āļ™āđāļšāļš Streaming

āļāļēāļĢ Bootstrap gRPC Server āđƒāļ™ NestJS āļ—āļģāđ„āļ”āđ‰āļ”āļąāļ‡āļ™āļĩāđ‰:

main.tstypescript
import { NestFactory } from '@nestjs/core';
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
import { join } from 'path';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.createMicroservice<MicroserviceOptions>(
    AppModule,
    {
      transport: Transport.GRPC,
      options: {
        package: 'users',
        protoPath: join(__dirname, 'proto/users.proto'),
        url: '0.0.0.0:5000',
      },
    },
  );
  await app.listen();
}
bootstrap();

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ™āļĩāđ‰āļˆāļ°āļŠāļĢāđ‰āļēāļ‡ gRPC Server āļ—āļĩāđˆāļĢāļąāļšāļŸāļąāļ‡āļšāļ™ Port 5000 āđ‚āļ”āļĒāđƒāļŠāđ‰ Package users āļ•āļēāļĄāļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđƒāļ™āđ„āļŸāļĨāđŒ .proto

āļŠāļģāļŦāļĢāļąāļš Controller āļ—āļĩāđˆāļĢāļ­āļ‡āļĢāļąāļš gRPC Method āļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰ Decorator @GrpcMethod āđāļ—āļ™ @MessagePattern:

users.controller.tstypescript
import { Controller } from '@nestjs/common';
import { GrpcMethod } from '@nestjs/microservices';
import { UsersService } from './users.service';

@Controller()
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @GrpcMethod('UsersService', 'FindOne')
  async findOne(data: { id: string }) {
    return this.usersService.findById(data.id);
  }
}

āļĢāļđāļ›āđāļšāļš gRPC Streaming āđƒāļ™ NestJS

gRPC āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢ Streaming āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļēāļĒāļĢāļđāļ›āđāļšāļš āđ„āļ”āđ‰āđāļāđˆ Server Streaming, Client Streaming āđāļĨāļ° Bidirectional Streaming āļāļēāļĢāđƒāļŠāđ‰ Server Streaming āđƒāļ™ NestJS āļ•āđ‰āļ­āļ‡āļ­āļēāļĻāļąāļĒ RxJS Observable āđƒāļ™āļāļēāļĢāļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāļĨāļ°āļŠāļīāđ‰āļ™

users.controller.ts — server streamingtypescript
import { Observable, from } from 'rxjs';
import { map } from 'rxjs/operators';
import { GrpcMethod } from '@nestjs/microservices';

@GrpcMethod('UsersService', 'FindMany')
findMany(data: { role: string; limit: number }): Observable<any> {
  // Stream users matching the filter one by one
  const users$ = from(this.usersService.findByRole(data.role, data.limit));
  return users$.pipe(
    map((user) => ({
      id: user.id,
      email: user.email,
      name: user.name,
      role: user.role,
    })),
  );
}

Server Streaming āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļāļĢāļ“āļĩāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļģāļ™āļ§āļ™āļĄāļēāļāļāļĨāļąāļšāđ„āļ›āļĒāļąāļ‡ Client āđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĢāļ­āđƒāļŦāđ‰ Query āđ€āļŠāļĢāđ‡āļˆāļŠāļĄāļšāļđāļĢāļ“āđŒāļ—āļąāđ‰āļ‡āļŦāļĄāļ” āļ‹āļķāđˆāļ‡āļŠāđˆāļ§āļĒāļĨāļ” Memory Usage āđāļĨāļ°āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡ Time to First Byte

Bidirectional Streaming āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ—āļąāđ‰āļ‡ Client āđāļĨāļ° Server āļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļēāļāļąāļ™āđ„āļ”āđ‰āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļš Real-time Applications āđ€āļŠāđˆāļ™ Chat āļŦāļĢāļ·āļ­ Live Dashboard

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Error āđƒāļ™ Streaming

āđ€āļĄāļ·āđˆāļ­āđƒāļŠāđ‰ gRPC Streaming āļ„āļ§āļĢāļĢāļ°āļĄāļąāļ”āļĢāļ°āļ§āļąāļ‡āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Error āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļ Error āļ—āļĩāđˆāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢ Stream āļˆāļ°āļ—āļģāđƒāļŦāđ‰ Stream āļ–āļđāļāļĒāļāđ€āļĨāļīāļāļ—āļąāļ™āļ—āļĩ āļ„āļ§āļĢāđƒāļŠāđ‰ catchError Operator āļˆāļēāļ RxJS āđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļāļēāļĢ Error āđāļĨāļ°āļŠāđˆāļ‡ Fallback Value āļŦāļĢāļ·āļ­ Retry āļ•āļēāļĄāļ„āļ§āļēāļĄāđ€āļŦāļĄāļēāļ°āļŠāļĄ

Hybrid Applications: HTTP āđāļĨāļ° gRPC āļšāļ™ Service āđ€āļ”āļĩāļĒāļ§āļāļąāļ™

āđƒāļ™āļŦāļĨāļēāļĒāļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒ āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāļ—āļąāđ‰āļ‡ HTTP API āļŠāļģāļŦāļĢāļąāļš External Client āđāļĨāļ° gRPC āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļ āļēāļĒāđƒāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡ Services NestJS āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ Hybrid Application āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļĢāļąāļ™āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡ Protocol āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđ„āļ”āđ‰

main.ts — hybrid applicationtypescript
import { NestFactory } from '@nestjs/core';
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
import { join } from 'path';
import { AppModule } from './app.module';

async function bootstrap() {
  // HTTP server on port 3000
  const app = await NestFactory.create(AppModule);

  // gRPC microservice on port 5000
  app.connectMicroservice<MicroserviceOptions>({
    transport: Transport.GRPC,
    options: {
      package: 'users',
      protoPath: join(__dirname, 'proto/users.proto'),
      url: '0.0.0.0:5000',
    },
  });

  await app.startAllMicroservices();
  await app.listen(3000);
}
bootstrap();

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđƒāļŦāđ‰ Service āđ€āļ”āļĩāļĒāļ§āļŠāļēāļĄāļēāļĢāļ–āļĢāļąāļš Request āļˆāļēāļ HTTP āļšāļ™ Port 3000 āđāļĨāļ° gRPC āļšāļ™ Port 5000 āđ„āļ”āđ‰āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āļ‹āļķāđˆāļ‡āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ„āđˆāļ­āļĒāđ† Migrate āļˆāļēāļ Monolith āđ„āļ›āļŠāļđāđˆ Microservices

āļžāļĢāđ‰āļ­āļĄāļ—āļĩāđˆāļˆāļ°āļžāļīāļŠāļīāļ•āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Node.js / NestJS āđāļĨāđ‰āļ§āļŦāļĢāļ·āļ­āļĒāļąāļ‡āļ„āļĢāļąāļš?

āļāļķāļāļāļ™āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āđāļšāļšāđ‚āļ•āđ‰āļ•āļ­āļš, flashcards āđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

Service Boundaries āđāļĨāļ° Domain-Driven Design āļāļąāļš NestJS

āļāļēāļĢāļ­āļ­āļāđāļšāļš Microservices āļ—āļĩāđˆāļ”āļĩāļ•āđ‰āļ­āļ‡āļ„āļģāļ™āļķāļ‡āļ–āļķāļ‡ Service Boundaries āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄ āļŦāļĨāļąāļāļāļēāļĢ Domain-Driven Design (DDD) āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡āđāļ•āđˆāļĨāļ° Service āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž

āđāļ™āļ§āļ—āļēāļ‡āļŦāļĨāļąāļāđƒāļ™āļāļēāļĢāļāļģāļŦāļ™āļ” Service Boundaries āļĄāļĩāļ”āļąāļ‡āļ™āļĩāđ‰:

Bounded Context āđāļ•āđˆāļĨāļ° Service āļ„āļ§āļĢāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļš Domain āđ€āļ”āļĩāļĒāļ§āļ—āļĩāđˆāļĄāļĩāļ„āļ§āļēāļĄāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļ™āļ­āļĒāđˆāļēāļ‡āļŠāļąāļ”āđ€āļˆāļ™ āđ€āļŠāđˆāļ™ Orders Service, Users Service āļŦāļĢāļ·āļ­ Payments Service

Aggregate Root āđƒāļŠāđ‰ Aggregate Pattern āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļĨāļļāđˆāļĄ Entity āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢ Transactional Consistency āđ€āļ‚āđ‰āļēāļ”āđ‰āļ§āļĒāļāļąāļ™ āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ„āļ§āļĢāļ—āļģāļœāđˆāļēāļ™ Aggregate Root āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™

Event Storming āđƒāļŠāđ‰āđ€āļ—āļ„āļ™āļīāļ„ Event Storming āđƒāļ™āļāļēāļĢāļ„āđ‰āļ™āļŦāļē Domain Events āđāļĨāļ°āļāļģāļŦāļ™āļ” Service Boundaries āļˆāļēāļ Event āļ—āļĩāđˆāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđƒāļ™āļĢāļ°āļšāļš

NestJS Module System āļŠāļ™āļąāļšāļŠāļ™āļļāļ™āļāļēāļĢāđāļšāđˆāļ‡ Bounded Context āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļ›āđ‡āļ™āļ˜āļĢāļĢāļĄāļŠāļēāļ•āļī āđāļ•āđˆāļĨāļ° Module āļŠāļēāļĄāļēāļĢāļ– Encapsulate Logic āļ‚āļ­āļ‡ Domain āļ™āļąāđ‰āļ™āđ† āđāļĨāļ° Export āđ€āļ‰āļžāļēāļ° Interface āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™

Reliability Patterns: Timeouts, Retries āđāļĨāļ° Circuit Breakers

āđƒāļ™āļĢāļ°āļšāļš Microservices āļ„āļ§āļēāļĄāļ™āđˆāļēāđ€āļŠāļ·āđˆāļ­āļ–āļ·āļ­āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļŠāļģāļ„āļąāļāļ­āļĒāđˆāļēāļ‡āļĒāļīāđˆāļ‡ āļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡ Services āļ­āļēāļˆāļĨāđ‰āļĄāđ€āļŦāļĨāļ§āđ„āļ”āđ‰āļˆāļēāļāļŦāļĨāļēāļĒāļŠāļēāđ€āļŦāļ•āļļ āđ€āļŠāđˆāļ™ Network Latency, Service Unavailability āļŦāļĢāļ·āļ­ Resource Exhaustion

āļāļēāļĢāđƒāļŠāđ‰ Timeout āđāļĨāļ° Retry Pattern āđƒāļ™ NestJS āļŠāļēāļĄāļēāļĢāļ–āļ—āļģāđ„āļ”āđ‰āļ”āđ‰āļ§āļĒ RxJS Operators:

orders.service.tstypescript
import { Inject, Injectable } from '@nestjs/common';
import { ClientGrpc } from '@nestjs/microservices';
import { firstValueFrom, timeout, retry } from 'rxjs';

@Injectable()
export class OrdersService {
  private usersService: any;

  constructor(@Inject('USERS_PACKAGE') private client: ClientGrpc) {}

  onModuleInit() {
    this.usersService = this.client.getService('UsersService');
  }

  async getOrderWithUser(orderId: string, userId: string) {
    // 3-second deadline, 2 retries with exponential backoff
    const user = await firstValueFrom(
      this.usersService.findOne({ id: userId }).pipe(
        timeout(3000),
        retry({ count: 2, delay: (err, retryCount) => {
          const jitter = Math.random() * 100;
          return new Promise(r => setTimeout(r, 1000 * retryCount + jitter));
        }}),
      ),
    );
    return { orderId, user };
  }
}

āđ‚āļ„āđ‰āļ”āļ™āļĩāđ‰āđāļŠāļ”āļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ Timeout 3 āļ§āļīāļ™āļēāļ—āļĩ āđāļĨāļ° Retry āļŠāļđāļ‡āļŠāļļāļ” 2 āļ„āļĢāļąāđ‰āļ‡āļžāļĢāđ‰āļ­āļĄ Exponential Backoff āđāļĨāļ° Jitter āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™ Thundering Herd Problem

Circuit Breaker Pattern āđ€āļ›āđ‡āļ™āļ­āļĩāļāļŦāļ™āļķāđˆāļ‡ Pattern āļ—āļĩāđˆāļŠāļģāļ„āļąāļāđƒāļ™āļāļēāļĢāļ›āđ‰āļ­āļ‡āļāļąāļ™āđ„āļĄāđˆāđƒāļŦāđ‰ Failure āđāļžāļĢāđˆāļāļĢāļ°āļˆāļēāļĒāđ„āļ›āļ—āļąāđ‰āļ‡āļĢāļ°āļšāļš āđ€āļĄāļ·āđˆāļ­ Service āļŦāļ™āļķāđˆāļ‡āļĨāđ‰āļĄāđ€āļŦāļĨāļ§āđ€āļāļīāļ™āļˆāļģāļ™āļ§āļ™āļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆāļāļģāļŦāļ™āļ” Circuit āļˆāļ° Open āđāļĨāļ° Request āđƒāļŦāļĄāđˆāļˆāļ°āļ–āļđāļ Reject āļ—āļąāļ™āļ—āļĩāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĢāļ­ Timeout

āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ Library āđ€āļŠāđˆāļ™ opossum āļŦāļĢāļ·āļ­ cockatiel āļĢāđˆāļ§āļĄāļāļąāļš NestJS āđ€āļžāļ·āđˆāļ­ Implement Circuit Breaker Pattern āđ„āļ”āđ‰

āļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­ Trace āđƒāļ™ NestJS 11

NestJS 11 āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­ Trace Context āļĢāļ°āļŦāļ§āđˆāļēāļ‡ Services āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāđ€āļĄāļ·āđˆāļ­āđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļš OpenTelemetry āļ‹āļķāđˆāļ‡āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ•āļīāļ”āļ•āļēāļĄ Request āļ—āļĩāđˆāļœāđˆāļēāļ™āļŦāļĨāļēāļĒ Services āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ„āļĢāļšāļ–āđ‰āļ§āļ™ āļ„āļ§āļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē Tracing āļ•āļąāđ‰āļ‡āđāļ•āđˆāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒāđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļŠāļ°āļ”āļ§āļāđƒāļ™āļāļēāļĢ Debug

āļžāļĢāđ‰āļ­āļĄāļ—āļĩāđˆāļˆāļ°āļžāļīāļŠāļīāļ•āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Node.js / NestJS āđāļĨāđ‰āļ§āļŦāļĢāļ·āļ­āļĒāļąāļ‡āļ„āļĢāļąāļš?

āļāļķāļāļāļ™āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āđāļšāļšāđ‚āļ•āđ‰āļ•āļ­āļš, flashcards āđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ NestJS Microservices

āļŠāđˆāļ§āļ™āļ™āļĩāđ‰āļĢāļ§āļšāļĢāļ§āļĄāļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™āļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒāđ€āļāļĩāđˆāļĒāļ§āļāļąāļš NestJS Microservices āļžāļĢāđ‰āļ­āļĄāļ„āļģāļ•āļ­āļšāļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ

āļ„āļģāļ–āļēāļĄāļ—āļĩāđˆ 1: āļ­āļ˜āļīāļšāļēāļĒāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ @MessagePattern āđāļĨāļ° @EventPattern

āļ„āļģāļ•āļ­āļš: @MessagePattern āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļš Request-Response Pattern āļ—āļĩāđˆāļœāļđāđ‰āđ€āļĢāļĩāļĒāļāļ•āđ‰āļ­āļ‡āļāļēāļĢāļĢāļ­āļĢāļąāļšāļœāļĨāļĨāļąāļžāļ˜āđŒāļāļĨāļąāļšāļĄāļē āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢ Query āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĢāļ·āļ­ Command āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļœāļĨāļĨāļąāļžāļ˜āđŒ āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆ @EventPattern āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļš Fire-and-Forget Pattern āļ—āļĩāđˆāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļœāļĨāļĨāļąāļžāļ˜āđŒāļāļĨāļąāļš āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđāļˆāđ‰āļ‡ Event āđƒāļŦāđ‰ Services āļ­āļ·āđˆāļ™āļ—āļĢāļēāļšāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĢāļ­āļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļš

āļ„āļģāļ–āļēāļĄāļ—āļĩāđˆ 2: gRPC āđƒāļŦāđ‰āļ‚āđ‰āļ­āļ”āļĩāļ­āļ°āđ„āļĢāđ€āļŦāļ™āļ·āļ­āļāļ§āđˆāļē REST āđƒāļ™āļĢāļ°āļšāļš Microservices

āļ„āļģāļ•āļ­āļš: gRPC āđƒāļŦāđ‰āļ‚āđ‰āļ­āļ”āļĩāļŦāļĨāļēāļĒāļ›āļĢāļ°āļāļēāļĢ āđ„āļ”āđ‰āđāļāđˆ āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļ—āļĩāđˆāļŠāļđāļ‡āļāļ§āđˆāļēāđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđƒāļŠāđ‰ Protocol Buffers āļ—āļĩāđˆ Serialize āļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ”āđ‰āđ€āļĨāđ‡āļāļāļ§āđˆāļē JSON, āļĢāļ­āļ‡āļĢāļąāļš HTTP/2 āļ—āļĩāđˆāļŠāđˆāļ§āļĒāđƒāļŦāđ‰ Multiplexing āđ„āļ”āđ‰, āļĄāļĩ Strongly Typed Contract āļˆāļēāļ .proto file āļ—āļĩāđˆāļŠāđˆāļ§āļĒāļ›āđ‰āļ­āļ‡āļāļąāļ™ Breaking Changes, āđāļĨāļ°āļĢāļ­āļ‡āļĢāļąāļš Streaming āļ—āļąāđ‰āļ‡ Server-side, Client-side āđāļĨāļ° Bidirectional

āļ„āļģāļ–āļēāļĄāļ—āļĩāđˆ 3: āļ­āļ˜āļīāļšāļēāļĒāļ§āļīāļ˜āļĩāļāļēāļĢ Implement Circuit Breaker āđƒāļ™ NestJS

āļ„āļģāļ•āļ­āļš: Circuit Breaker āļŠāļēāļĄāļēāļĢāļ– Implement āđ„āļ”āđ‰āđ‚āļ”āļĒāđƒāļŠāđ‰ Library āđ€āļŠāđˆāļ™ opossum āļŦāļĢāļ·āļ­ cockatiel Circuit āļĄāļĩāļŠāļēāļĄāļŠāļ–āļēāļ™āļ° āđ„āļ”āđ‰āđāļāđˆ Closed (āļ—āļģāļ‡āļēāļ™āļ›āļāļ•āļī), Open (Reject Request āļ—āļąāļ™āļ—āļĩ) āđāļĨāļ° Half-Open (āļ—āļ”āļŠāļ­āļšāļ§āđˆāļē Service āļāļĨāļąāļšāļĄāļēāļ—āļģāļ‡āļēāļ™āļ›āļāļ•āļīāļŦāļĢāļ·āļ­āļĒāļąāļ‡) āđ€āļĄāļ·āđˆāļ­ Failure āđ€āļāļīāļ™ Threshold Circuit āļˆāļ° Open āđāļĨāļ°āļŦāļĨāļąāļ‡āļˆāļēāļāļœāđˆāļēāļ™ Reset Timeout āļˆāļ°āđ€āļ‚āđ‰āļēāļŠāļđāđˆāļŠāļ–āļēāļ™āļ° Half-Open āđ€āļžāļ·āđˆāļ­āļ—āļ”āļŠāļ­āļš

āļ„āļģāļ–āļēāļĄāļ—āļĩāđˆ 4: āļ§āļīāļ˜āļĩāļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Distributed Transactions āđƒāļ™āļĢāļ°āļšāļš Microservices

āļ„āļģāļ•āļ­āļš: āļĄāļĩāļŦāļĨāļēāļĒāđāļ™āļ§āļ—āļēāļ‡ āđ„āļ”āđ‰āđāļāđˆ Saga Pattern āļ—āļĩāđˆāđƒāļŠāđ‰ Compensating Transactions āđ€āļžāļ·āđˆāļ­ Rollback āđ€āļĄāļ·āđˆāļ­āđ€āļāļīāļ” Failure, Outbox Pattern āļ—āļĩāđˆāđ€āļāđ‡āļš Event āđƒāļ™āļ•āļēāļĢāļēāļ‡āđ€āļ”āļĩāļĒāļ§āļāļąāļš Business Data āđāļĨāđ‰āļ§āđƒāļŠāđ‰ CDC āļŦāļĢāļ·āļ­ Polling āļŠāđˆāļ‡ Event, āđāļĨāļ° Event Sourcing āļ—āļĩāđˆāđ€āļāđ‡āļšāļ—āļļāļ State Change āđ€āļ›āđ‡āļ™ Event āđāļĨāđ‰āļ§ Replay āđ€āļĄāļ·āđˆāļ­āļ•āđ‰āļ­āļ‡āļāļēāļĢ

āļ„āļģāļ–āļēāļĄāļ—āļĩāđˆ 5: āļ­āļ˜āļīāļšāļēāļĒāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ Hybrid Application āļāļąāļš Standalone Microservice āđƒāļ™ NestJS

āļ„āļģāļ•āļ­āļš: Standalone Microservice āļŠāļĢāđ‰āļēāļ‡āļ”āđ‰āļ§āļĒ NestFactory.createMicroservice() āļĢāļ­āļ‡āļĢāļąāļšāđ€āļ‰āļžāļēāļ° Transport āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ€āļžāļĩāļĒāļ‡āļ•āļąāļ§āđ€āļ”āļĩāļĒāļ§ āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆ Hybrid Application āļŠāļĢāđ‰āļēāļ‡āļ”āđ‰āļ§āļĒ NestFactory.create() āđāļĨāđ‰āļ§āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­ Microservices āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāļ”āđ‰āļ§āļĒ app.connectMicroservice() āļŠāđˆāļ§āļĒāđƒāļŦāđ‰ Service āđ€āļ”āļĩāļĒāļ§āļĢāļ­āļ‡āļĢāļąāļšāļ—āļąāđ‰āļ‡ HTTP āđāļĨāļ° Transport āļ­āļ·āđˆāļ™āđ† āļžāļĢāđ‰āļ­āļĄāļāļąāļ™

āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđ€āļ•āļĢāļĩāļĒāļĄāļ•āļąāļ§āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ āļŠāļēāļĄāļēāļĢāļ–āļĻāļķāļāļĐāļēāđ€āļĢāļ·āđˆāļ­āļ‡ NestJS modules and dependency injection āđāļĨāļ° middleware and interceptors āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆāļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļĒāļīāđˆāļ‡āļ‚āļķāđ‰āļ™

āļžāļĢāđ‰āļ­āļĄāļ—āļĩāđˆāļˆāļ°āļžāļīāļŠāļīāļ•āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Node.js / NestJS āđāļĨāđ‰āļ§āļŦāļĢāļ·āļ­āļĒāļąāļ‡āļ„āļĢāļąāļš?

āļāļķāļāļāļ™āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āđāļšāļšāđ‚āļ•āđ‰āļ•āļ­āļš, flashcards āđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āļŠāļĢāļļāļ›

āļāļēāļĢāļžāļąāļ’āļ™āļē Microservices āļ”āđ‰āļ§āļĒ NestJS āđƒāļ™āļ›āļĩ 2026 āļĄāļĩāļ„āļ§āļēāļĄāļŠāļĄāļšāļđāļĢāļ“āđŒāđāļšāļšāļĄāļēāļāļĒāļīāđˆāļ‡āļ‚āļķāđ‰āļ™ āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļŠāļģāļ„āļąāļāļ—āļĩāđˆāļ„āļ§āļĢāļˆāļ”āļˆāļģāļĄāļĩāļ”āļąāļ‡āļ™āļĩāđ‰:

  • Transport Layer āļ‚āļ­āļ‡ NestJS āļĢāļ­āļ‡āļĢāļąāļšāļŦāļĨāļēāļĒ Protocol āđāļĨāļ°āđƒāļŠāđ‰ @MessagePattern āļŠāļģāļŦāļĢāļąāļš Request-Response āđāļĨāļ° @EventPattern āļŠāļģāļŦāļĢāļąāļš Event-Driven
  • gRPC āđƒāļŦāđ‰āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡āļāļ§āđˆāļē REST āđāļĨāļ°āļĢāļ­āļ‡āļĢāļąāļš Streaming āļŦāļĨāļēāļĒāļĢāļđāļ›āđāļšāļš āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļ āļēāļĒāđƒāļ™āļĢāļ°āļšāļš
  • Hybrid Application āļŠāđˆāļ§āļĒāđƒāļŦāđ‰ Service āđ€āļ”āļĩāļĒāļ§āļĢāļ­āļ‡āļĢāļąāļšāļ—āļąāđ‰āļ‡ HTTP āđāļĨāļ° gRPC āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢ Migrate āđ„āļ›āļŠāļđāđˆ Microservices
  • Domain-Driven Design āļŠāđˆāļ§āļĒāļāļģāļŦāļ™āļ” Service Boundaries āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļœāđˆāļēāļ™ Bounded Context āđāļĨāļ° Aggregate Pattern
  • Reliability Patterns āđ€āļŠāđˆāļ™ Timeout, Retry āđāļĨāļ° Circuit Breaker āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļˆāļģāđ€āļ›āđ‡āļ™āļŠāļģāļŦāļĢāļąāļšāļĢāļ°āļšāļš Production
  • NestJS 11 āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļŦāļĄāđˆ āđ€āļŠāđˆāļ™ unwrap() āđāļĨāļ° Trace Propagation āļ—āļĩāđˆāļŠāđˆāļ§āļĒāđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđāļĨāļ° Debug

āđ€āļĢāļīāđˆāļĄāļāļķāļāļ‹āđ‰āļ­āļĄāđ€āļĨāļĒ!

āļ—āļ”āļŠāļ­āļšāļ„āļ§āļēāļĄāļĢāļđāđ‰āļ‚āļ­āļ‡āļ„āļļāļ“āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āđāļ—āđ‡āļ

#nestjs
#microservices
#grpc
#nodejs
#typescript

āđāļŠāļĢāđŒ

āļšāļ—āļ„āļ§āļēāļĄāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡

NestJS āđāļĨāļ° Prisma āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļŠāđāļ•āļāđāļšāđ‡āļāđ€āļ­āļ™āļ”āđŒāļŠāļĄāļąāļĒāđƒāļŦāļĄāđˆ

NestJS + Prisma: āļŠāđāļ•āļāđāļšāđ‡āļāđ€āļ­āļ™āļ”āđŒāļŠāļĄāļąāļĒāđƒāļŦāļĄāđˆāļŠāļģāļŦāļĢāļąāļš Node.js

āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒāđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ API āđāļšāđ‡āļāđ€āļ­āļ™āļ”āđŒāļŠāļĄāļąāļĒāđƒāļŦāļĄāđˆāļ”āđ‰āļ§āļĒ NestJS āđāļĨāļ° Prisma āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē āđ‚āļĄāđ€āļ”āļĨ āđ€āļ‹āļ­āļĢāđŒāļ§āļīāļŠ āļ—āļĢāļēāļ™āđāļ‹āļāļŠāļąāļ™ āđāļĨāļ°āđāļ™āļ§āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļ”āļĩ

āļ„āļđāđˆāļĄāļ·āļ­ NestJS āļŠāļģāļŦāļĢāļąāļšāļŠāļĢāđ‰āļēāļ‡ REST API āļ—āļĩāđˆāļŠāļĄāļšāļđāļĢāļ“āđŒ

NestJS: āļŠāļĢāđ‰āļēāļ‡ REST API āļ—āļĩāđˆāļŠāļĄāļšāļđāļĢāļ“āđŒāļ•āļąāđ‰āļ‡āđāļ•āđˆāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™

āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ REST API āļĢāļ°āļ”āļąāļšāļĄāļ·āļ­āļ­āļēāļŠāļĩāļžāļ”āđ‰āļ§āļĒ NestJS āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ Controller, Service, Module, āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ”āđ‰āļ§āļĒ class-validator āđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”

Guards, Interceptors āđāļĨāļ°āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđāļšāļšāđ‚āļĄāļ”āļđāļĨāļ‚āļ­āļ‡ NestJS āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„

āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ NestJS: Guards, Interceptors āđāļĨāļ°āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđāļšāļšāđ‚āļĄāļ”āļđāļĨ

āļ„āļģāļ–āļēāļĄāļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒāđƒāļ™āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāđ€āļ—āļ„āļ™āļīāļ„ NestJS āđ€āļāļĩāđˆāļĒāļ§āļāļąāļš Guards, Interceptors āđāļĨāļ°āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđāļšāļšāđ‚āļĄāļ”āļđāļĨ āļžāļĢāđ‰āļ­āļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ” TypeScript āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļĢāļđāļ›āļ˜āļĢāļĢāļĄāđāļĨāļ°āļ„āļģāļ­āļ˜āļīāļšāļēāļĒāļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„