FAQ2 min read

Hybrid application

Hybrid application - bu ikki yoki undan ortiq turli manbadan keladigan so'rovlarni tinglaydigan ilova. Bu HTTP serverni mikroservis listener bilan yoki hatto bir nechta turli mikro

Hybrid application - bu ikki yoki undan ortiq turli manbadan keladigan so'rovlarni tinglaydigan ilova. Bu HTTP serverni mikroservis listener bilan yoki hatto bir nechta turli mikroservis listener'lar bilan birlashtirishi mumkin. Standart createMicroservice metodi bir nechta serverni qo'llab-quvvatlamaydi, shu sababli bunday holatda har bir mikroservis qo'lda yaratilishi va ishga tushirilishi kerak. Buning uchun INestApplication instansiyasini connectMicroservice() metodi orqali INestMicroservice instansiyalari bilan ulash mumkin.

TypeScript
1const app = await NestFactory.create(AppModule);
2const microservice = app.connectMicroservice<MicroserviceOptions>({
3  transport: Transport.TCP,
4});
5
6await app.startAllMicroservices();
7await app.listen(3001);
Hint

app.listen(port) metodi ko'rsatilgan manzilda HTTP serverni ishga tushiradi. Agar ilovangiz HTTP so'rovlarni qayta ishlamasa, uning o'rniga app.init() metodidan foydalanishingiz kerak.

Bir nechta mikroservis instansiyalarini ulash uchun har bir mikroservis uchun connectMicroservice() metodini chaqiring:

TypeScript
1const app = await NestFactory.create(AppModule);
2// microservice #1
3const microserviceTcp = app.connectMicroservice<MicroserviceOptions>({
4  transport: Transport.TCP,
5  options: {
6    port: 3001,
7  },
8});
9// microservice #2
10const microserviceRedis = app.connectMicroservice<MicroserviceOptions>({
11  transport: Transport.REDIS,
12  options: {
13    host: 'localhost',
14    port: 6379,
15  },
16});
17
18await app.startAllMicroservices();
19await app.listen(3001);

Bir nechta mikroservisga ega hybrid application ichida @MessagePattern() ni faqat bitta transport strategiyasiga (masalan, MQTT) bog'lash uchun Transport tipidagi ikkinchi argumentni uzatishimiz mumkin. Bu enum ichida barcha built-in transport strategiyalari aniqlangan.

TypeScript
1@MessagePattern('time.us.*', Transport.NATS)
2getDate(@Payload() data: number[], @Ctx() context: NatsContext) {
3  console.log(`Subject: ${context.getSubject()}`); // e.g. "time.us.east"
4  return new Date().toLocaleTimeString(...);
5}
6@MessagePattern({ cmd: 'time.us' }, Transport.TCP)
7getTCPDate(@Payload() data: number[]) {
8  return new Date().toLocaleTimeString(...);
9}
Hint

@Payload(), @Ctx(), Transport va NatsContext@nestjs/microservices paketidan import qilinadi.

Konfiguratsiyani ulashish

Standart holatda hybrid application asosiy (HTTP-based) ilova uchun sozlangan global pipe, interceptor, guard va filter'larni meros qilib olmaydi. Ushbu konfiguratsiyalarni asosiy ilovadan meros qilib olish uchun connectMicroservice() chaqiruvidagi ikkinchi argumentda (ixtiyoriy options obyektida) inheritAppConfig xossasini quyidagicha o'rnating:

TypeScript
1const microservice = app.connectMicroservice<MicroserviceOptions>(
2  {
3    transport: Transport.TCP,
4  },
5  { inheritAppConfig: true },
6);