Есть две стороны, которые нужно разделить.Они могут быть частью одного приложения nest.js (например, гибридное приложение ) или находиться в нескольких различных приложениях nest.js:
Клиент
Клиент передает сообщения натема / шаблон и получает ответ от получателя (ей) широковещательного сообщения.
Сначала необходимо подключить своего клиента.Вы можете сделать это в onModuleInit
.В этом примере ProductService
передает сообщение при создании нового объекта продукта.
@Injectable()
export class ProductService implements OnModuleInit {
@Client({
transport: Transport.REDIS,
options: {
url: 'redis://localhost:6379',
},
})
private client: ClientRedis;
async onModuleInit() {
// Connect your client to the redis server on startup.
await this.client.connect();
}
async createProduct() {
const newProduct = await this.productRepository.createNewProduct();
// Send data to all listening to product_created
const response = await this.client.send({ type: 'product_created' }, newProduct).toPromise();
return response;
}
}
Имейте в виду, что this.client.send
возвращает Observable
.Это означает, что ничего не произойдет, пока вы не subscribe
с ним (что вы можете сделать неявно, вызвав toPromise()
).
Pattern Handler
Обработчик шаблона принимает сообщения и отправляет ответ обратноклиенту.
@Controller()
export class NewsletterController {
@MessagePattern({ type: 'product_created' })
informAboutNewProduct(newProduct: ProductEntity): string {
await this.sendNewsletter(this.recipients, newProduct);
return `Sent newsletter to ${this.recipients.length} customers`;
}
Конечно, обработчик параметров также может быть клиентом, и при этом получать и широковещательные сообщения.