Como lidar com os retries dos eventos?

Sobre o problema

Quando a execução dos handlers de um evento demora muito tempo, por exemplo 800ms, após X tempo acontece um retry (ou mais dependendo se demora novamente a execução), acredito que isso acontece porque o serviço que chama o evento debe ter um timeout e executa os retries necessários até o evento responder num tempo inferior ao timeout configurado.

Como reproducir

  1. Faça um clone do events-example.
  2. Faça o evento demorar mais de 800ms (pode ser com um setTimeout).
  3. Validar se acontecem retries olhando a terminal.

Qual é meu cenário?

Estou emitindo N eventos para processar os produtos em lotes (50 produtos por lote), os eventos são os seguintes.

Evento 1: Obter os IDs dos produtos de uma categoria em especifico, depois, emitir e enviar os dados ao Evento 2.

Evento 2: Criação de especificações e valores de especificações, depois, emitir e enviar os dados ao Evento 3.

Evento 3: Atualização das especificações do produto, depois, emitir e enviar os dados ao Evento 4.

Evento 4: São salvas algumas informações no Master Data, depois, emitir e enviar os dados ao Evento 1.

Os dados que são enviados entre os eventos 1, 2 e 3 são os IDs dos produtos da iteração, no evento 4 é feito o envio da próxima página para continuar a cadeia de eventos.

Então a cadeia de eventos fica assim:

Evento 1 => Evento 2 => Evento 3 => Evento 4 => Evento 1 => …

Até finalizar, quando a página sejá maior a última página (total de produtos / 50).

Objetivo

  1. Obter mais informações de como funcionam os eventos no backend do VTEX IO.
  2. Obter mais informações de quais são os elementos que podem gerar retries nos eventos, timeout, errors, HTTP error codes, etc…
  3. Recomendações de como lidar com eventos que podem levar um tempo maior ou que tem uma cadeia de eventos complexa e como evitar retries explicitamente (middleware?).

Sugestão

Poderiam criar uns tutoriais ou guias avançada sobre a feature de eventos.

Fiz uma alteração na propiedade timeout do service.json, antes tinha o valor de 2 segundos troquei para 54 segundos e deu uma melhorada.

Recomendo não aumentar esse valor acima de 54 segundos, a API Gateway da VTEX da erro após 55 segundos.

Ainda achou valido os pontos enumerados na seção de Objetivo.