Como você usa CouchDB alterar as notificações contínuas mudanças de Java?

StackOverflow https://stackoverflow.com/questions/1640653

  •  08-07-2019
  •  | 
  •  

Pergunta

Eu estou tentando usar o couchdb (contínua) muda API do Java e achar que depois de esgotar a lista de mudanças atuais na corrente parece ser fechada, não ficar aberto para sempre, uma vez que é suposto.

O código que estou usando é abaixo. Eu esperaria a nunca desistir do loop while, mas fazer assim que as alterações actualmente existentes estão sendo acabado transmitido. Eu sou relativamente novo para ambos couchdb e Java assim pode estar faltando alguma coisa óbvia. Alguém pode me mostrar como escrever isso corretamente?

URL url = new URL("[path to database here]/_changes?feed=continuous";);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true); 
conn.setUseCaches(false); 
conn.setRequestProperty("Connection", "Keep-Alive"); 
conn.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line = reader.readLine()) != null){
    // do something with the line here
}
// Should never get here under normal circumstances
reader.close();
Foi útil?

Solução

Na verdade, há um tempo limite padrão de 60000ms (60 segundos) a menos que um valor de tempo limite diferente ou um batimento cardíaco é fornecida. Eu atualizei o _changes wiki página volta em outubro e incluiu quaisquer incumprimentos me deparei no código .

Definir o batimento cardíaco, basicamente, significa que você vai estar assistindo para um tempo limite no cliente, ou seja, nenhuma nova linha para a pulsação meio período você definitivamente perderam sua conexão. Acredito CouchDB desativa a sua verificação do tempo limite, se há um batimento cardíaco.

Em qualquer caso, você provavelmente deve esperar que a conexão seja fechada em algum ponto e código para essa condição.

Outras dicas

Você pode usar &heartbeat=1000 para obter couchdb envio de novas linhas sobre o fio a cada segundo. Isso irá manter a sua aberto conexão até que você desligue e / ou CouchDB fica desligado.

Mas você está certo, eu também teria esperado que a conexão não vai fechar -. Parece que também conn.setReadTimeout(0); não ajuda em nada

Este é apenas um palpite desde que eu não sei o suficiente sobre a implementação couchdb continuousfeed ou a implementação HttpURLConnection. Mas parece impedindo quaisquer erros no código dos dois que se seu cliente conexão java tem um conjunto de tempo limite mais baixo do que o batimento cardíaco padrão para couchdb mudanças contínuas, em seguida, a conexão pode ficar terminadas pelo cliente java.

Apenas um pensamento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top