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
- Faça um clone do events-example.
- Faça o evento demorar mais de 800ms (pode ser com um setTimeout).
- 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
- Obter mais informações de como funcionam os eventos no backend do VTEX IO.
- Obter mais informações de quais são os elementos que podem gerar retries nos eventos, timeout, errors, HTTP error codes, etc…
- 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.