РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpMcNe 164 of 201 menu
◀ ▶

Событие без ответа в Nest

После записи строки страница не должна ждать, пока соседний процесс закончит побочный шаг. Запрос с ответом удерживает HTTP соединение, хотя достаточно лишь сообщить факт по каналу.

Клиент микросервиса умеет слать событие: отправка идёт без ожидания данных обратно. На стороне слушателя метод помечают шаблоном события на латинице, тело попадает в параметр с полезной нагрузкой. Так веб процесс быстро отвечает клиенту, а удалённый класс ведёт счётчик или журнал в памяти.

Покажем на примере постов:

import { Controller } from '@nestjs/common'; import { EventPattern, Payload } from '@nestjs/microservices'; @Controller() export class PostMicroserviceController { createdCount = 0; @EventPattern('post_created') handlePostCreated(@Payload() data: { title: string }) { this.createdCount += 1; } }

Клиентский сервис после сохранения шлёт сигнал и не ждёт ответа:

import { Inject, Injectable } from '@nestjs/common'; import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class PostClientService { client: ClientProxy; constructor(@Inject('POST_SERVICE') client: ClientProxy) { this.client = client; } notifyCreated(title: string) { this.client.emit('post_created', { title }); } }

HTTP сервис сохраняет заголовок локально и сразу уведомляет соседний процесс:

import { Injectable } from '@nestjs/common'; import { PostClientService } from './post.client.service.js'; @Injectable() export class PostService { posts: { title: string }[] = []; postClientService: PostClientService; constructor(postClientService: PostClientService) { this.postClientService = postClientService; } create(title: string) { const post = { title }; this.posts.push(post); this.postClientService.notifyCreated(title); return post; } }

После добавления работника в память WorkerService шлите сигнал через WorkerClientService и увеличивайте счётчик в поле WorkerMicroserviceController.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить