【发布时间】: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方面似乎没有问题。
我最感兴趣的是:
- 我的 ClientProxy 是否设置正确
- 我是否使用 pipe() 和 toPromise() 正确设置了应答处理,因为我不太熟悉 ClientProxy 和 RxJs。
感谢您百次回复!
【问题讨论】:
标签: redis rxjs timeout microservices nestjs