2016-02-11 6 views
6

Ho un servizio che si prevede di eseguire richieste a ~ 5 o più richieste/min. Questo servizio dipende da Apache AsyncHttpClient. Dopo alcuni minuti, i client raggiungono alcune condizioni che causano java.lang.IllegalStateException: la richiesta non può essere eseguita; Stato reattore I/O: STOPPED. Tutte le richieste al client iniziano fallendo con lo stesso messaggio di eccezione. Dopo il riavvio del servizio, questo ciclo si ripete.java.lang.IllegalStateException: la richiesta non può essere eseguita; Stato reattore I/O: STOPPED

È molto difficile eseguire il debug di questo problema poiché l'errore di esecuzione della richiesta sorprende non causa una richiamata al metodo failed() di AsyncResponse.

Da quello che ho potuto raccogliere, c'è stata una correzione HTTPCORE-370 in HttpCore NIO che ha risolto un problema simile in 4.3.2. Sto usando la seguente versione - commons-HttpClient-3.1.jar httpasyncclient-4.1.1.jar httpcore-4.4.4.jar httpcore-nio-4.4.4.jar

Eppure vedendo questo problema. Qualsiasi aiuto sarebbe molto apprezzato.

+0

In ritardo, hai trovato una soluzione per questo problema? – dav1d

risposta

0

che ho avuto a che fare con questa stessa eccezione nella mia domanda, e alla fine ho trovato un suggerimento utile da questo post - http://httpcomponents.10934.n7.nabble.com/I-O-reactor-status-STOPPED-td29059.html

È possibile utilizzare il metodo #getAuditLog() del reattore I/O scopri esattamente quale eccezione ha causato la sua chiusura.

Se si mantiene un riferimento alla IOReactor del vostro ConnectionManager, è possibile chiamare questo metodo per ottenere comprensione del vero problema:

http://hc.apache.org/httpcomponents-core-4.4.x/httpcore-nio/apidocs/org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor.html#getAuditLog()

Risulta che stavo facendo qualcosa di incredibilmente stupido nel mio codice . Ma non riuscivo a capirlo fino a quando non ho letto il registro di controllo.

+0

wo hanno lo stesso problema, puoi condividere la tua ragione? – afei

+0

Il mio problema ha avuto a che fare con la logica di business del mio codice. Era una situazione in cui stavo cercando di fermare lo stesso Google Guava StopWatch due volte. Quello che trovi nel log di controllo di IOReactor sarà probabilmente qualcosa di molto specifico per il codice che hai scritto. – Madpony