Questa cosa interessa anche me in prima persona...
Anche io sono del filone Spring (Boot in particolare) ed effettivamente
giusto qualche giorno fa cercavo un modo per gestire in maniera asincrona
le chiamate ai servizi che stanno dietro le mie API (controller nel mio
caso). Leggendo Cloud Native Java (
http://shop.oreilly.com/product/0636920038252.do) ho trovato una cosa molto
simile a quanto suggerito dal tuo collega in effetti. Nonostante sia un
grande fan di Spring Boot, nutro un po' di sospetti sull'effettiva
efficacia di questa "semplice" annotazione, per cui seguo con molto
interesse il thread...

Ciao!

Marco

[image: Google Developer Group Torino]

Marco Terrinoni / GDG Manager
[email protected] / +393772055208

Google Developer Group Torino

[image: Twitter]  <https://twitter.com/TerrinoniMarco> [image: Google +]
<https://plus.google.com/+MarcoTerrinoni> [image: LinkedIn]
<https://it.linkedin.com/in/marcoterrinoni> [image: Github]
<https://github.com/terrinoni> [image: Stack Overflow]
<http://stackoverflow.com/users/3493420/marco> [image: Bitbucket]
<https://bitbucket.org/marco_terrinoni/>

2018-03-29 16:19 GMT+02:00 Federico Fissore [email protected]
[it-torino-java-jug] <[email protected]>:

>
>
> Ciao a tutti
>
> l'altro giorno stavo chattando con un collega su CompletableFuture e
> AsyncResponse di jax.rs. Lui, fan di spring, mi risponde che per rendere
> una API REST asincrona ti basta scrivere una cosa come
>
> @RequestMapping(value = "/callable", method = RequestMethod.GET)
> public Callable<String> executeSlowTask() {
> Callable<String> callable = taskService.execute();
>
> return callable;
> }
>
> Cioè wrappa in un Callable tutto il codice sincrono e sequenziale che
> hai, punto.
>
> L'approccio non mi ha convinto. Tutte le attività potenzialmente
> asyncrone, come le query verso un db o le chiamate http ad altri
> servizi, vengono trattate come sincrone e gestite dal thread del thread
> pool con cui `taskService` lavora.
>
> Poi ho pensato che in effetti non ho fatto una scelta migliore quando ho
> convertito tutte le API (java) a CompletableFuture, che di default si
> basa sul `ForkJoinPool.commonPool()`, di nuovo un unico thread pool
> comune a tutti i task.
>
> Quindi qual è il modo migliore per far fare alla CPU altro lavoro mentre
> è in attesa del risultato di una query?
> Oppure ha ragione il mio collega e potevo risparmiarmi del lavoro?
>
> federico
> 
>

Reply via email to