Я звоню в API Gateway через ax ios.
Мой вариант использования выглядит примерно так -
- Вызов хоста конечной точки 1
- Если ответ получен при первой попытке, затем вернуть ответ.
- Если ответ не получен при первой попытке, проверьте ввод. Мой ввод содержит параметр, который сообщает мне, стоит ли мне инвестировать в второй вызов (или резервный logi c) для этого ввода или нет. Если этот параметр говорит мне пропустить, я просто пропускаю вызов и просто регистрирую, говоря который пытался один раз, но не смог получить его и не пытался снова.
- Если ответ не получен, а параметр говорит, что я должен повторить попытку, я меняю хост на резервный host2 и повторяю.
- Но Я бы хотел повторить попытку host1 3 раза в экспоненциальной отсрочке, а затем попробовать host2 3 раза в экспоненциальной отсрочке. Если ничего из этого не приводит к выводу, я сдаюсь и регистрирую это как ошибку.
- Я также хочу установить максимальный тайм-аут для всего процесса, равный 4 секундам.
- Я хочу чтобы увидеть, как выполняется каждый повторный вызов в виде журналов.
Теперь пример:
import { Method } from 'axios';
import axios from 'axios';
// Axios Retryal Doc : https://www.npmjs.com/package/axios-retry
import axiosRetry from 'axios-retry';
const signedRequest = awsRequestSigner.sign(httpRequest);
axiosRetry(axios, { retries: this.MAX_RETRIES, retryDelay: axiosRetry.exponentialDelay });
const response = await axios(signedRequest, { timeout: this.CALL_TIMEOUT })
.then(({ data }) => data)
.catch(() => []);
if (response && response.length > 0) {
console.log(`Yay, Response received`);
}
else {
if (request.isOptional) {
console.log(`Give Up, Not retrying anymore`)
);
} else {
// Retry logic
}
}
private createHttpRequest(input: string) {
const host = process.env.HOST;
const path = `${process.env.PATH}${input}`;
const url = `https://${host}${path}`;
const method: Method = 'GET';
return {
url,
host,
path,
method,
headers: {
'content-type': 'application/json',
},
};
}
Я запутался при работе с Ax ios о том, как достичь этого.
Примечание: этот код выполняется в AWS лямбда.