Come gestire più chiamate a webservice?

2

Ho un servizio web REST e ha un metodo semplice come;

public void processItem(Item item);

Il problema è processItem il metodo impiega troppo tempo per completare quasi 1 minuto) e ci possono essere più chiamate in poco tempo.

Come posso gestire queste richieste in modo efficiente?

Webservice crea un nuovo thread per ogni richiesta e mantiene nuove richieste quando viene superato il limite del thread, per quanto ne so. Ma non voglio che i client ottengano eccezioni per il timeout.

Devo usare qualcosa come LinkedBlockingQueue o c'è un altro modo efficace?

LinkedBlockingQueue<Item> items = new LinkedBlockingQueue();

public void processItem(Item item){
    items.put(item);
}
    
posta hellzone 28.02.2018 - 14:38
fonte

1 risposta

2

Il tuo problema immediato potrebbe essere risolto con un server web migliore o riconfigurando l'API per lavorare su un modello asincrono e non mangiare i thread.

Tuttavia, andando avanti con le richieste lunghe, dovresti passare a un modello di coda che possa far fronte a ritardi indefiniti.

A seconda della tua infrastruttura, forse il tuo cliente può postare direttamente in una coda e ascoltare una coda di risposta.

Oppure puoi continuare a postare sull'API HTTP, ma devi semplicemente salvare il lavoro per un'ulteriore app di lavoro da elaborare in un secondo momento e fornire una API di query in modo che il client possa eseguire il polling per gli aggiornamenti.

    
risposta data 28.02.2018 - 18:21
fonte

Leggi altre domande sui tag