我正在两个 NestJS 实例之间设置基本的 EventPattern。但是,其他微服务并未发出/接收该事件。
我试图在文档中找到一些具体的例子,但是看起来设置与调用 clinet.emit/client.call 来调用其他微服务不同。
微服务 1.
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import { Client, Transport, ClientProxy, ClientsModule, EventPattern } from '@nestjs/microservices';
import { Observable } from 'rxjs';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Client({ transport: Transport.REDIS })
client: ClientProxy;
@Get()
async call(): Promise<number> {
const pattern = { cmd: 'sum' };
const payload = [1, 2, 3];
const result = await this.client.emit('user_created', {age: 5});
return this.client.send<number>(pattern, payload).toPromise();
}
}
Run Code Online (Sandbox Code Playgroud)
微服务二
import { Controller } from '@nestjs/common';
import { MessagePattern, EventPattern, Client, Transport, ClientProxy } from '@nestjs/microservices';
@Controller()
export class MathController {
@Client({ transport: Transport.REDIS })
client: ClientProxy;
@MessagePattern({ cmd: 'sum' })
sum(data: number[]): number {
console.log('Message');
return 1;
}
@EventPattern('user_created')
async handleUserCreated(data: Record<string, unknown>) {
console.log('EVENT');
// business logic
}
}
Run Code Online (Sandbox Code Playgroud)
当我们调用Microservice1.get客户端时,调用sum确实发生并Message打印在Microservice 2. 然而,期望也是EVENT印刷的Microservice 2。
我有同样的问题,而测试的框架,我能够加入,以获得预期结果toPromise()的emit电话。
所以你可以试试:
const result = await this.client.emit('user_created', {age: 5});.toPromise()
emit返回一个 observable,所以你必须订阅它。无论是toPromise()或subscribe()会做。
更多信息:https : //www.learnrxjs.io/concepts/rxjs-primer.html
| 归档时间: |
|
| 查看次数: |
2868 次 |
| 最近记录: |