Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Queda no desempenho na montagem de lotes #402

Open
lucasbhti opened this issue Mar 7, 2024 · 0 comments
Open

Queda no desempenho na montagem de lotes #402

lucasbhti opened this issue Mar 7, 2024 · 0 comments

Comments

@lucasbhti
Copy link

lucasbhti commented Mar 7, 2024

Prezados, bom dia.

Trabalho no Tribunal de Justiça do Estado de Minas Gerais e utilizamos esta aplicação para nos comunicarmos com o eSocial.

Devido a uma indisponibilidade temporária do eSocial-Gov, mais de 25 mil ocorrências de remuneração e pagamento acabaram ficando reprezadas no trasnsmissor. Quando o eSocial-Gov foi restabelecido, o serviço de montagem de lotes ficou extremamente lento, demorando em média 20 minutos para montar os lotes de 50 ocorrências.

Ao analisar a situação, chegamos a conclusão que o problema estava acontecendo no ponto abaixo (TarefaEnvioEventos.java a partir da linha 63):

List<EventoDTO> eventosHabilitados = eventosEmFila.stream()
.filter(evento -> regrasFactory.getRegra(evento).habilitado(evento))
.limit(LIMITE_EVENTOS_LOTE)
.collect(Collectors.toList());

Neste ponto, ao aplicar o "comando `filter(evento -> regrasFactory.getRegra(evento).habilitado(evento))" as regras de habilitação são executadas para todos os itens da lista "eventosEmFila", mesmo o lote possuindo uma quantidade máxima estabelecida.

Para contornar o problema alteramos o trecho da seguinte forma:
List<EventoDTO> eventosHabilitados = new java.util.ArrayList<EventoDTO>();
Long contador = 0l;
for(EventoDTO evento : eventosEmFila) {
if(regrasFactory.getRegra(evento).habilitado(evento)) {
eventosHabilitados.add(evento);
contador++;
}
if (contador.equals(LIMITE_EVENTOS_LOTE))
break;
}

A intenção foi simplesmente evitar a execução desnecessária da validação de habilitação se a lista de habilitados já tiver alcançado o número máximo estipulado. Após esta alteração, a montagem do lote passou a ser realizada em menos de 5 segundos.

Certamente existem controles mais completos que poderiam ser implantados, como o carregamento da lista "eventosEmFila" por tipo de evento (tabela, não-periódicos e depois periódicos) que também traria melhorias na performance de montagem de lote, mas esta simples alteração já foi suficiente para desafogarmos a montagem de lotes.

Sendo assim, fica a proposta de melhoria.

Obrigado pelo excelente trabalho.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant