NestJSAdvanced
NestJS Microservices
Transport strategies, TCP/RMQ, client proxy, service communication — বাংলায়।
11টি অংশবাংলা ভাষায়
Microservices দিয়ে আপনার application-কে আলাদা আলাদা services-এ ভাগ করা যায় — প্রতিটি নিজের port/transport-এ চলবে।
Transport Strategies
| Transport | ব্যবহার |
|---|---|
| TCP | ডিফল্ট, typical microservice |
| Redis | pub/sub pattern |
| NATS | cloud-native messaging |
| gRPC | Type-safe RPC |
| Kafka | streaming/event |
| RabbitMQ | message queue enterprise |
MicroService App তৈরি
math-service/main.tstypescript
typescript
import { NestFactory } from "@nestjs/core";
import { MicroserviceOptions, Transport } from "@nestjs/microservices";
import { MathModule } from "./math.module";
async function bootstrap() {
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
MathModule,
{
transport: Transport.TCP,
options: { host: "127.0.0.1", port: 3001 },
},
);
await app.listen();
}
bootstrap();math-service/math.controller.tstypescript
typescript
import { Controller } from "@nestjs/common";
import { MessagePattern, Payload } from "@nestjs/microservices";
@Controller()
export class MathController {
@MessagePattern({ cmd: "add" })
add(@Payload() data: { a: number; b: number }): number {
return data.a + data.b;
}
}Client Proxy — Main App থেকে call
main-app/app.module.tstypescript
typescript
import { Module } from "@nestjs/common";
import { ClientsModule, Transport } from "@nestjs/microservices";
import { AppController } from "./app.controller";
@Module({
imports: [
ClientsModule.register([
{
name: "MATH_SERVICE",
transport: Transport.TCP,
options: { host: "127.0.0.1", port: 3001 },
},
]),
],
controllers: [AppController],
})
export class AppModule {}main-app/app.controller.tstypescript
typescript
import { Controller, Get, Inject } from "@nestjs/common";
import { ClientProxy } from "@nestjs/microservices";
import { lastValueFrom } from "rxjs";
@Controller("math")
export class AppController {
constructor(
@Inject("MATH_SERVICE") private readonly client: ClientProxy,
) {}
@Get()
async add() {
const result = await lastValueFrom(
this.client.send({ cmd: "add" }, { a: 5, b: 3 }),
);
return { result }; // 8
}
}# run service প্রথমে
node dist/main.js # or npm run start:prod
# তারপর main app
npm run start:dev
# GET http://localhost:3000/math → { result: 8 }কখন Microservices?
ছোট project-এ monolith sufficient — দল/অ্যাপ বড় হলে, scaling-এ services split করুন। শুরু থেকেই modular monolith (module separation) রাখুন।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।