Ax ios Механизм повтора в машинописном тексте - PullRequest
0 голосов
/ 04 августа 2020

Я звоню в API Gateway через ax ios.

Мой вариант использования выглядит примерно так -

  1. Вызов хоста конечной точки 1
  2. Если ответ получен при первой попытке, затем вернуть ответ.
  3. Если ответ не получен при первой попытке, проверьте ввод. Мой ввод содержит параметр, который сообщает мне, стоит ли мне инвестировать в второй вызов (или резервный logi c) для этого ввода или нет. Если этот параметр говорит мне пропустить, я просто пропускаю вызов и просто регистрирую, говоря который пытался один раз, но не смог получить его и не пытался снова.
  4. Если ответ не получен, а параметр говорит, что я должен повторить попытку, я меняю хост на резервный host2 и повторяю.
  5. Но Я бы хотел повторить попытку host1 3 раза в экспоненциальной отсрочке, а затем попробовать host2 3 раза в экспоненциальной отсрочке. Если ничего из этого не приводит к выводу, я сдаюсь и регистрирую это как ошибку.
  6. Я также хочу установить максимальный тайм-аут для всего процесса, равный 4 секундам.
  7. Я хочу чтобы увидеть, как выполняется каждый повторный вызов в виде журналов.

Теперь пример:

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 лямбда.

...