Мне нужна помощь от кого-то опытного. Недавно я создал 2 микросервиса (назовем их Amber и Boris), которые взаимодействуют друг с другом с помощью ClientProxy и REDIS. Время от времени, когда Амбер запрашивает данные у Бориса, получает сообщение об ошибке «1002 *».
Это конфигурация 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)
}
}
Затем на службе Бориса у меня в основном установлен только Controller с @MessagePattern и я Я просто возвращаю данные:
@MessagePattern({type: 'getAvailableCases'})
findAll(@Payload() data: object): Promise<object> {
this.assignPayload(data);
return this.getData();
}
Важно отметить, что служба Борис выполняет запросы к базе данных, чтобы вернуть данные. Но на стороне базы данных, похоже, нет никаких проблем.
Больше всего меня интересует:
- правильно ли настроен ClientProxy
- правильно ли настроена обработка ответа с pipe () и toPromise () , так как я не очень хорошо знаком с ClientProxy и Rx Js.
Спасибо вам сто раз за любой ответ!