gpt4 book ai didi

nestjs - 如何让 EventPattern 在 Nest JS 中工作

转载 作者:行者123 更新时间:2023-12-05 01:40:50 27 4
gpt4 key购买 nike

我正在两个 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();
}


}

微服务二

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
}
}

当我们调用 Microservice1.get 客户端时,对 sum 的调用确实发生并且 Message 打印在 Microservice 2。但是,期望 EVENT 也打印在 Microservice 2 上。

最佳答案

我在测试框架时遇到了同样的问题,我通过在 emit 调用上添加 toPromise() 获得了预期的结果。

所以你可以试试:

const result = await this.client.emit('user_created', {age: 5});.toPromise()

emit 返回一个可观察对象,因此您必须订阅它。 toPromise()subscribe() 都可以。

更多信息:https://www.learnrxjs.io/concepts/rxjs-primer.html

关于nestjs - 如何让 EventPattern 在 Nest JS 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55718480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com