App backend IO que percorre o catálogo, porém algumas APIs dão erro 429

O app pega todos os SKUs do catalogo, aproximadamente mais de 49k produtos, para cada produto precisamos buscar suas informações, o preço atual e enviar os dados para outra API.

Estou utilizando os events para processar os SKUs em chunks de 400 items, isso geraria 122 events aproximadamente.

import { MAX_ITEMS_PER_PAGE } from '../../../constants';

export async function example(ctx: Context) {
  const {
    clients: {
      catalogClient,
    },
  } = ctx

  const {
    range: { total }
  } = await catalogClient.getProductsAndSkus({
    _from: 1,
    _to: 1
  })

  const skuIds: number[] = []
  const totalIterations = Math.ceil(total / MAX_ITEMS_PER_PAGE)

  for (let i = 0; i < totalIterations; i++) {
    const skus = await catalogClient.getAllSKUIDs({
      page: i + 1,
      pageSize: MAX_ITEMS_PER_PAGE
    })

    skuIds.push(...skus)
  }

  const chunkSize = 400; // Set the chunk size to 400
  const numberOfChunks = Math.ceil(skuIds.length / chunkSize);

  for (let i = 0; i < numberOfChunks; i++) {
    const chunk = skuIds.slice(i * chunkSize, (i + 1) * chunkSize);

    await ctx.clients.events.sendEvent('', 'process-skus', {
      skuIds: chunk
    })
  }

  ctx.status = 200
  ctx.body = 'In progress'
}

Porém estou tendo problemas com algumas APIs da VTEX por causa do throttling (400 request por minuto).

Tem alguma app de exemplo?
Alguém já teve que implementar uma app backend no IO que precise trabalhar com muitos dados?

Nesse caso não seria possível voce criar um timeout para consultar de dados nessa API? do jeito que voce fez deve acontecer o erro 429 que significa muitas requisições foram feitas.

1 Like