Páginas filhas
  • Contingência de Processos

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

 

Como descrito no Quando habilitado para trabalhar com o Processamento por demanda, o processamento dos documentos é realizado com através de um Pool de Threads onde os dados para processamento são obtidos em memória após o recebimento do processo pela camada de WS, ou seja, ao invés de buscar registro registros na base de dados para o processamento, as rotinas responsáveis pelo de processamento recebem os dados através de parâmetros, enviados pelas rotinas  rotinas de recepção dos documentos. Essa característica exige a criação uma contingência para em casos de indisponibilidade de Threads ou em casos de falhas durante o processamento, pois todo o processo está sendo realizado com dados em memoria da aplicação.          

A indisponibilidade de Threads para processamento pode ocorrer em casos de alta demanda de Processamento de requisições ou devido à falhas As falhas de processamento podem ser provocadas devido à  fatores que possam provocar a interrupção do processamento . Seja por como falha de acesso a serviços externos de integração com a aplicação(como a indisponibilidade dos serviços do Fisco de documentos: Sefaz, Prefeituras etc...  ) ou até mesmo pela queda(desligamento) do servidor da aplicação. 

Para que haja a contingência do processamento, os dados para processamento são Processos são persistidos na base de dados. Todas requisições referente a processamento de documentos geram Processos dentro do TSS. E é através desses Processos que o Job de Contingência garantirá o processamento.dados para que o Job de Contingência possa acessar e iniciar ou prosseguir com o processamento. O fato dos Processos serem sempre gravados na tabela de processos antes de iniciar o processamento por Demanda , faz com que o JOB filtre apenas os registros que não estejam em processamento. O filtro é realizado através do Status do processo.

Caso o pool de Threads possua Threads disponíveis para processamento, os processos são gravados com "Status = 2: ( Em processamento )", caso contrário serão registrados com STATUS=1(Aguardando processamento). A cada tentativa de processamento,  o Processo é encerrado e o Status passa para "Status= 1(Aguardando Processamento)" para que o JOB possa dar continuidade no processamento.

Em casos onde a interrupção do processamento  ocorra de forma involuntária, impossibilitando a atualização do STATUS do processo, o critério para filtro dos registros e dado em comparação na data e horário atual com a data e horário do início do processamento. Caso um processo esteja em processamento a mais de 5 minutos, o registro entrará no filtro e será reprocessado. 

 

No exemplo abaixo temos uma ilustração de um processo de Emissao de NFe. Neste exemplo onde o Processamento por Demanda foi interrompido no Sub Processo de Consulta de retorno do processamento na Sefaz. Neste caso o JOB de Contingência garante o reprocessamento a partir do Sub Processo que apresentou a falha.

 

 

 

 

 

Fluxo do Processo:

 

1 -  Rotina de Recepção  realiza a remessa do documento na Tabela de Negócio.

...

5 -  O processamento por Demanda é interrompido no Sub Processo de Consulta do documento

6 -  O registro do Processo é retornado na consulta realizada pelo JOB na tabela de Pocessos JOB realiza filtro dos registros pendentes de processamento.

7 - O JOB de Contingência reinicia o processamento a partir do Sub Processo que apresentou a falha.

...