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
anon629167172 likes
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é+
R
raphaeloneves1 like
Bem bacana!!! Valeu.
R
raphaeloneves
@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.
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…
privatebooleanping(){Processping;intpesquisa=0;//Manipulação para evitar return precoce.try{ping=Runtime.getRuntime().exec("ping 8.8.8.8");Scannerleitor=newScanner(ping.getInputStream());while(leitor.hasNextLine()){Stringretorno=leitor.nextLine();System.out.println(retorno);if(retorno.contains("Resposta de 8.")){System.out.println("INTERNET SIM");pesquisa=1;break;//return true;}else{if(retorno.equals("")){//System.out.println("DUVIDA NA INTERNET");}else{if(retorno.contains("Disparando 8.8.")){//System.out.println("DUVIDA NA INTERNET");}else{System.out.println("INTERNET NAO");break;}}}}}catch(IOExceptionex){//Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);System.out.println("I-O ERROR: "+ex);}if(pesquisa==0){returnfalse;}else{returntrue;}}