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()
.
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 :
const app = await NestFactory.create(AppModule);// microservice #1const microserviceTcp = app.connectMicroservice<MicroserviceOptions>({ transport: Transport.TCP, options: { port: 3001, },});// microservice #2const 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.
@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 :
const microservice = app.connectMicroservice<MicroserviceOptions>({ transport: Transport.TCP,}, { inheritAppConfig: true,});