Pessoal. O intuito deste tópico é mais um brainstorm sobre um cenário hipotético que me questionaram e não soube argumentar a respeito.
Imagina que tenho um serviço de hospedagem (serviço A) que recebe como parâmetros o período de hospedagem e a cidade/estado, onde ao receber os dados, ele executa uma pesquisa em 20 outros serviços de hospedagem de hotéis. Ou seja, cada hotel tem o seu serviço que verifica a disponibilidade da hospedagem e retorna estes dados pro serviço cliente.
Aí entra a questão: o serviço A precisa realizar a consulta em cada um dos 20 hotéis. Tem alguma forma de configurar o serviço A para que ao consultar os outros serviços, ele receba respostas que sejam devolvidas em até 30 segundos? Clareando: libero uma consulta em lote e cada um dos hotéis tem 30 segundos pra responder a requisição. Quem responder em 30s tem os dados publicados, mas quem ultrapassar esse timeout tem a resposta descartada.
Imagino que sim, em um sistema de Nfce, ao enviar a nota sem internet, ele tenta se comunicar mesmo assim, porém, existe esse timeout de 30~60 segundos coincidentemente o mesmo que seu cenário hipotético.
Entretanto, optei por pingar 8.8.8.8 e verificar conexão primeiro, e nos primeiros 8 segundos já declaro sem conexão, no seu cenário, isso seria facilmente adaptável para verificar se o Hotel 1, 2, 3… possui retorno, isso seria bem mais prático que esperar o timeout.
A melhor arquitetura que me vem a mente é a implementação de uma interface “expirável”.
Vide o vídeo aos 30 minutos e 24 segundos:
Assim, independe do tipo de consulta.
Apenas aguarda um processamento dentro de um determinado espaço de tempo, caso não ocorra ou ocorra parcialmente ao encerrar o tempo, a conexão pode ser fechada e algum processamento pode ser realizado.
No vídeo é argumentado sobre eventos diversos como leilões.
Té+
@Cid_Marcos, no caso o timeout é uma métrica definida pelo time do serviço. O serviço faz a requisição e espera até 30seg. Se com 30seg tiver algo pendente, é descartado, e somente é processado o resultado que retornou detnro desse período.
Só que eventualmente a Sefaz ou o WebService do Amazonas fica lento.
Então primeiro verifico se possui internet, para evitar esse timeout longo, e ai ele transmite em contigência.
mas… se ele ter a resposta ->
> for(int i = 1; i<=6; i++){
> Thread.sleep(800);
> if((Boolean)consulta.get(“autorizado”)){
> System.out.println(“Autorizado na tentativa: “+i+”/6”);
> return consulta;
> }else{
> consulta = consultaEnvioNfe(recibo, xml, codigoUf, ambiente);
> }
> }
Somando as pausas entre cada consulta, dá 7,8s de espera de envio.
Se não tivesse com internet, essa demora seria de 37s.
-> e aqui o código que verifica a internet antes de enviar…