Domanda

Abbiamo una web-application che permette agli utenti attivano una richiesta a una risorsa esterna. La risorsa esterna spende un importo non specificato di tempo per raccogliere i risultati, quindi dobbiamo interrogare per ottenere gli aggiornamenti, e di raccogliere i risultati finali quando sono fatto.

Vogliamo fare in modo che quando l'utente attiva la richiesta, viene aggiunto a una coda, e poi un certo numero di thread di lavoro Prenderemo ogni richiesta e fare il polling, mentre l'utente fa altre cose.

Dal momento che il numero di richieste variano molto durante il giorno, abbiamo cifra che sarebbe stato uno spreco di risorse per avere un sacco di lavoratori facendo nulla quando è lento, ma allo stesso tempo abbiamo bisogno di avere abbastanza lavoratori per gestire il picco carico sul sistema.

Vorremmo qualcosa che potrebbe aggiungere più lavoratori quando ci sono un sacco di richieste in attesa, ma di uccidere i lavoratori quando c'è poco da fare.

E '/ è stato possibile fare questo con EJB, ma non vogliamo usare quella. Anche noi non vogliamo usare JMS o di altre misure su larga scala per gestire questa situazione, se non è quello che stiamo già utilizzando (primavera, quarzo, un sacco di roba Apache).

Come EJB ha il supporto per questo, ed è una delle caratteristiche più utili che vi si trovano, immaginiamo che qualcuno ha già risolto questo problema per noi. Suggerimenti?

È stato utile?

Soluzione

ThreadPoolExecutor con i valori appropriati per il core e la massima dimensione della piscina.

Tenete a mente però che non ci sia un costo enorme di avere diverse centinaia di thread inattivi così si potrebbe prendere in considerazione solo utilizzando Executors.newFixedThreadPool() .

Altri suggerimenti

:

  

Se la piscina ha attualmente più di fili corePoolSize, fili in eccesso verrà terminata se ne è stato inattivo per più del KeepAliveTime (vedi getKeepAliveTime (java.util.concurrent.TimeUnit)). Questo fornisce un mezzo per ridurre il consumo di risorse quando la piscina non viene utilizzato attivamente. Se la piscina diventa più attivo in seguito, saranno costruite nuove discussioni.

così, vorrei suggerire, si tenta la libreria standard di Java prima. Si dovrà regolare i parametri un po ', ma i pool di thread è altamente configurabile come è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top