messaging-apis icon indicating copy to clipboard operation
messaging-apis copied to clipboard

Add retry to axios when the api did not respond (ENOTFOUND, ETIMEDOUT, etc) to prevent network glitches

Open leopucci opened this issue 4 years ago • 2 comments

Hi. Thanks for this module. It help´s me a lot!

Sometimes api´s freezes for one second or so. Or a minor network problem. Why not retry on no response errors? There is a package for axios. https://www.npmjs.com/package/retry-axios

There is a way to pin point the exact codes to retry, you can retry only on no response, or you can retry on specific http response codes.

i don´t know the proper response codes from the api that this could be useful But I do think that 2 retries if the api does not respond is a good thing that can prevent minor network problems and guarantee more sucess on the delivering.

 // Retry 3 times on requests that return a response (500, etc) before giving up.  Defaults to 3.
    retry: 3,

    // Retry twice on errors that don't return a response (ENOTFOUND, ETIMEDOUT, etc).
    noResponseRetries: 2,

    // Milliseconds to delay at first.  Defaults to 100. Only considered when backoffType is 'static'
    retryDelay: 100,

    // HTTP methods to automatically retry.  Defaults to:
    // ['GET', 'HEAD', 'OPTIONS', 'DELETE', 'PUT']
    httpMethodsToRetry: ['GET', 'HEAD', 'OPTIONS', 'DELETE', 'PUT'],

    // The response status codes to retry.  Supports a double
    // array with a list of ranges.  Defaults to:
    // [[100, 199], [429, 429], [500, 599]]
    statusCodesToRetry: [[100, 199], [429, 429], [500, 599]],

leopucci avatar Aug 31 '21 16:08 leopucci

Feel free to add your interceptors to the underlying axios instance: client.axios.

For example:

const client = new MessengerClient({
  accessToken: ACCESS_TOKEN,
  appId: APP_ID,
  appSecret: APP_SECRET,
  version: '6.0',
});

client.axios.defaults.raxConfig = {
  instance: client.axios
};
const interceptorId = rax.attach(client.axios);

chentsulin avatar Aug 31 '21 17:08 chentsulin

Nice! I din´t get it how could I attach it. I just did it. 👍 Thanks @chentsulin 🥇 I will let the issue open to you guys discuss if this is a good fit to add globally to the code or just to let user attach by himself.

leopucci avatar Aug 31 '21 17:08 leopucci