दो पक्ष हैं जिन्हें आपको अलग करने की आवश्यकता है। वे एक 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()
. पर कॉल करके परोक्ष रूप से कर सकते हैं )।
पैटर्न हैंडलर
पैटर्न हैंडलर संदेशों का उपभोग करता है और क्लाइंट को प्रतिक्रिया वापस भेजता है।
@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`;
}
बेशक, एक परम हैंडलर एक क्लाइंट भी हो सकता है और इसके साथ ही संदेश प्राप्त और प्रसारित दोनों कर सकते हैं।