【问题标题】:How to get EventPattern working in Nest JS如何让 EventPattern 在 Nest JS 中工作
【发布时间】:2019-05-17 03:12:09
【问题描述】:

我正在两个 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 上。

【问题讨论】:

  • 您可以尝试为client 明确设置port 吗?

标签: nestjs


【解决方案1】:

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

所以你可以试试:

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

emit 返回一个 observable,所以你必须订阅它。 toPromise()subscribe() 都可以。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-29
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多