Passer au contenu

Application hybride

Une application hybride est celle qui écoute des requêtes provenant de deux sources différentes ou plus. Cela peut combiner un serveur HTTP avec un écouteur de microservice ou même plusieurs écouteurs de microservices différents. La méthode par défaut createMicroservice ne permet pas plusieurs serveurs, donc dans ce cas, chaque microservice doit être créé et démarré manuellement. Pour ce faire, l’instance INestApplication peut être connectée avec des instances INestMicroservice via la méthode connectMicroservice().

Configuration de l'application
const app = await NestFactory.create(AppModule);
const microservice = app.connectMicroservice<MicroserviceOptions>({
transport: Transport.TCP,
});
await app.startAllMicroservices();
await app.listen(3001);

Pour connecter plusieurs instances de microservices, effectuez l’appel à connectMicroservice() pour chaque microservice :

Multiples microservices
const app = await NestFactory.create(AppModule);
// microservice #1
const microserviceTcp = app.connectMicroservice<MicroserviceOptions>({
transport: Transport.TCP,
options: {
port: 3001,
},
});
// microservice #2
const microserviceRedis = app.connectMicroservice<MicroserviceOptions>({
transport: Transport.REDIS,
options: {
host: 'localhost',
port: 6379,
},
});
await app.startAllMicroservices();
await app.listen(3001);

Pour lier @MessagePattern() à une seule stratégie de transport (par exemple, MQTT) dans une application hybride avec plusieurs microservices, nous pouvons passer le deuxième argument de type Transport, qui est une énumération avec toutes les stratégies de transport intégrées définies.

Stratégie de transport unique
@MessagePattern('time.us.*', Transport.NATS)
getDate(@Payload() data: number[], @Ctx() context: NatsContext) {
console.log(`Subject: ${context.getSubject()}`); // e.g. "time.us.east"
return new Date().toLocaleTimeString(...);
}
@MessagePattern({ cmd: 'time.us' }, Transport.TCP)
getTCPDate(@Payload() data: number[]) {
return new Date().toLocaleTimeString(...);
}

Partage de configuration

Par défaut, une application hybride n’hérite pas des tuyaux globaux, des intercepteurs, des gardes et des filtres configurés pour l’application principale (basée sur HTTP). Pour hériter de ces propriétés de configuration de l’application principale, définissez la propriété inheritAppConfig dans le deuxième argument (un objet d’options facultatif) de l’appel à connectMicroservice() comme suit :

Héritage de la configuration
const microservice = app.connectMicroservice<MicroserviceOptions>({
transport: Transport.TCP,
}, {
inheritAppConfig: true,
});