Microservices 
https://docs.nestjs.com/microservices/basics
NestJS propose un module intégré pour les microservices, il est disponible dans le paquet @nestjs/microservices.
Le principal changement par rapport à une API REST est que, au lieu d'écouter des requêtes HTTP, on écoutera des messages émis, generalement via un message broker. Une application microservice ne peut pas être à la fois un microservice et une API REST. En revanche, l'API REST pourra communiquer avec les microservices.
Il existe differents types de communication compatibles avec NestJS:
- TCP
- Redis
- RabbitMQ
- Kafka ...
Implémentation 
Microservice 
Le microservice "écoute" les messages émis et y répond (MessagePattern), ou ne répond pas (EventPattern).
// main.ts
// Configuration d'un microservice
async function bootstrap() {
  const app = await NestFactory.createMicroservice<MicroserviceOptions>(
    AppModule,
    {
      transport: Transport.REDIS,
      options: redisConfig,
    }
  );
  await app.listen();
}
bootstrap();// *.controller.ts
@Controller()
export class ColorsController {
  // Ecoute de l'évenement "generate_color" avec réponse
  @MessagePattern("generate_color")
  generateColor(breedSeed: string): string {
    return this.colorsService.getColors(breedSeed);
  }
  // Ecoute de l'évenement "cat_created" sans réponse
  @EventPattern("cat_created")
  async handleCatCreated(data: Record<string, unknown>) {
    //...
  }
}Client 
Le client (producer) émettra des messages et attendra une réponse ou non.
// *.module.ts
@Module({
  ...,
  imports: [
    ClientsModule.register([
      {
        name: 'COLORS_SERVICE',
        transport: Transport.REDIS,
        options: redisConfig,
      },
    ]),
    ...,
  ],
  ...,
})// *.service.ts
export class CatService {
  constructor(
    @Inject('COLORS_SERVICE') private client: ClientProxy,
  ) {}
  async create(cat: CreateCatDto): Promise<CatEntity> {
    const { seed } = breed;
    // Appel du microservice avec attente de réponse (Observable)
    const colorObservable = this.client.send<string, string>('generate_color', breed.seed);
    const color = await firstValueFrom(colorObservable);
    ...
    // Emission d'un évenement sans attente de réponse
    this.client.emit('cat_created', cat);
  }
}Observables 
https://rxjs.dev/guide/observable
Les réponses des microservices sont des Observables.
Un Observable est un objet qui peut émettre des valeurs, des erreurs ou se terminer de manière asynchrone.
const observable = new Observable((observer) => {
  observer.next("Hello");
  observer.error("Error");
  observer.complete();
});
observable.subscribe((value) => {
  console.log(value);
});
const first = await firstValueFrom(observable);