Microservicios en TypeScript: arquitectura y práctica de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Microservicios en TypeScript: arquitectura y práctica de la A a la Z

\n

En el desarrollo web moderno, la arquitectura monolítica está dando paso a microservicios flexibles y escalables. TypeScript, con su tipado estricto y potentes herramientas, se ha convertido en el lenguaje ideal para construir estos sistemas. En este artículo, analizaremos cómo diseñar e implementar microservicios en TypeScript, utilizando el popular framework NestJS, el broker de mensajes RabbitMQ y la contenedorización Docker.

\n\n

1. Fundamentos de la arquitectura de microservicios en TypeScript

\n

La arquitectura de microservicios implica dividir una aplicación en servicios independientes y débilmente acoplados. Cada servicio se encarga de su propia lógica de negocio (por ejemplo, gestión de usuarios, procesamiento de pedidos, pagos) y puede desarrollarse, implementarse y escalarse por separado.

\n\n

¿Por qué TypeScript?

\n
    \n
  • Tipado: Errores en tiempo de compilación, no en tiempo de ejecución. Especialmente importante al interactuar múltiples servicios a través de la red.
  • \n
  • Interfaces y tipos: Permiten definir estrictamente los contratos de la API (por ejemplo, DTO para solicitudes/respuestas).
  • \n
  • JavaScript moderno: TypeScript se compila a JS puro que funciona en Node.js.
  • \n
\n\n

Consideremos un ejemplo simple de un DTO fuertemente tipado para un microservicio de usuarios:

\n\n
// user.dto.ts\nexport interface CreateUserDto {\n  readonly email: string;\n  readonly password: string;\n  readonly name: string;\n}\n\nexport interface UserResponse {\n  id: string;\n  email: string;\n  name: string;\n  createdAt: Date;\n}
\n\n

Al transferir datos entre servicios (a través de HTTP o RabbitMQ), TypeScript garantiza que la estructura del objeto coincida con la esperada. Esto reduce críticamente la cantidad de errores.

\n\n

2. Implementación de un microservicio con NestJS

\n

NestJS es un framework progresivo para Node.js que admite de forma nativa la arquitectura de microservicios. Proporciona transportadores para TCP, Redis, RabbitMQ, Kafka y gRPC.

\n\n

Creemos un microservicio básico para la gestión de usuarios utilizando el transporte RabbitMQ.

\n\n

Paso 1: Instalación de dependencias

\n
npm install --save @nestjs/core @nestjs/common @nestjs/microservices\nnpm install --save amqplib amqp-connection-manager
\n\n

Paso 2: Creación del módulo principal y el controlador

\n
// user.controller.ts\nimport { Controller } from '@nestjs/common';\nimport { MessagePattern, Payload } from '@nestjs/microservices';\nimport { CreateUserDto, UserResponse } from './user.dto';\n\n@Controller()\nexport class UserController {\n  @MessagePattern('user.create')\n  async createUser(@Payload() data: CreateUserDto): Promise<UserResponse> {\n    // Aquí la lógica de creación de usuario en la BD\n    console.log('Creación de usuario:', data);\n    return {\n      id: 'uuid-123',\n      email: data.email,\n      name: data.name,\n      createdAt: new Date(),\n    };\n  }\n}
\n\n

Paso 3: Configuración del archivo principal para funcionar en modo microservicio

\n
// main.ts\nimport { NestFactory } from '@nestjs/core';\nimport { MicroserviceOptions, Transport } from '@nestjs/microservices';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.createMicroservice<MicroserviceOptions>(\n    AppModule,\n    {\n      transport: Transport.RMQ,\n      options: {\n        urls: ['amqp://localhost:5672'],\n        queue: 'user_queue',\n        queueOptions: {\n          durable: false,\n        },\n      },\n    },\n  );\n  await app.listen();\n  console.log('Microservicio de usuarios iniciado');\n}\nbootstrap();
\n\n

De esta manera, nuestro servicio se conecta a RabbitMQ y escucha la cola user_queue. Cualquier otro servicio (por ejemplo, el servicio de pedidos

Blogs

Book Recommendations