分離する必要がある2つの側面があります。これらは、1つの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`;
}
もちろん、パラメータハンドラはクライアントであり、メッセージの受信とブロードキャストの両方を行うこともできます。