Ada dua sisi yang perlu Anda pisahkan. Mereka dapat menjadi bagian dari satu aplikasi nest.js (mis. aplikasi hybrid) atau berada di beberapa aplikasi nest.js yang berbeda:
Klien
Klien menyiarkan pesan pada topik/pola dan menerima respons dari penerima pesan yang disiarkan.
Pertama, Anda harus menghubungkan klien Anda. Anda dapat melakukannya di onModuleInit
. Dalam contoh ini, ProductService
menyiarkan pesan saat entitas produk baru dibuat.
@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;
}
}
Perlu diingat, bahwa this.client.send
mengembalikan Observable
. Artinya, tidak akan terjadi apa-apa sampai Anda subscribe
untuk itu (yang secara implisit dapat Anda lakukan dengan memanggil toPromise()
).
Penangan Pola
Pengendali pola menggunakan pesan dan mengirim tanggapan kembali ke klien.
@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`;
}
Tentu saja, param handler juga bisa menjadi klien dan dengan demikian menerima dan menyiarkan pesan.