【问题标题】:Nestjs - redis communication between 2 microservices with ClientProxyNestjs - 使用 ClientProxy 在 2 个微服务之间进行 redis 通信
【发布时间】:2020-07-15 17:59:51
【问题描述】:

我需要有经验的人帮忙。我最近构建了 2 个微服务(我们称它们为 Amber 和 Boris),它们使用 ClientProxy 和 REDIS 相互通信。有时,当 Amber 向 Boris 请求数据时,会出现超时错误

这是 Amber 配置:

constructor(companyName: string, userId: number) {
    this.companyName = companyName;
    this.userId = userId;

    this.client = ClientProxyFactory.create({
        transport: Transport.REDIS,
        options: {
            retryAttempts: 0,
            retryDelay: 0,
            url: 'redis://<some_url>:<some_port>,
        },
    });
}

然后请求-响应:

private async sendRequest(pattern: string, payload?: object): Promise<any[]> {
    payload = payload || {};

    try {
        const result = await this.client.send(
            { type: pattern },
            { userId: this.userId, companyName: this.companyName, ...payload}
        )
        .pipe(
          timeout(30000),
          map((response: any) => { // Success...
              return response;
          }),
          catchError((error) => { // Error...
              return throwError(error);
          }),
        )
        .toPromise();

        return result;

    } catch (err) {
        Logger.error('Couldn\'t get data from Boris service: ' + err.message)
    }
}

然后在 Boris 服务上,我基本上只是用 @MessagePattern 设置了控制器,我只是返回数据:

@MessagePattern({type: 'getAvailableCases'})
findAll(@Payload() data: object): Promise<object> {
    this.assignPayload(data);
    return this.getData();
}

重要的是,Boris 服务正在对数据库进行查询以返回数据。但是在db方面似乎没有问题。

我最感兴趣的是:

  1. 我的 ClientProxy 是否设置正确
  2. 我是否使用 pipe() 和 toPromise() 正确设置了应答处理,因为我不太熟悉 ClientProxy 和 RxJs。

感谢您百次回复!

【问题讨论】:

    标签: redis rxjs timeout microservices nestjs


    【解决方案1】:

    原来,ClientProxy 在通信完成后并没有释放到 Redis 的连接。这样,连接数不断增加,直到没有连接为止。 解决方法是数据返回后关闭连接:

    this.client.close();
    

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 2019-01-18
      • 2010-09-29
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 2018-11-03
      • 2018-09-07
      相关资源
      最近更新 更多