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):
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.
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.