2016-01-18 20 views
7

Sto lavorando a un'app Web con Spring (Boot, MVC) e ci saranno alcune cose che dovranno essere eseguite in background, quindi non bloccherò la richiesta.Qual è il modo consigliato di eseguire i processi in background con Spring?

Attualmente stavo pensando di avere un processo Spring Batch che viene eseguito ogni 5 minuti e controlla una tabella (jobs_queue) nel DB se ci sono cose da fare e quindi eseguire le attività (in base a ciò che ogni riga della tabella richiede).

Ovviamente questa non è una buona soluzione scalabile (credo) poiché avrò un solo lavoratore (se ci sono troppi lavori in coda questo singolo lavoratore potrebbe non essere in grado di gestire il carico) e farà anche almeno una query DB ogni 5 minuti (vedi anche se ci sono lavori in coda).

Qual è un modo migliore per farlo?

risposta

2

Si consiglia di utilizzare RabbitMQ o ActiveMQ. Quindi puoi scrivere le tue attività in query e quando qualcuno o qualcosa aggiunge un'attività il tuo lavoro funzionerà. Penso che tu possa integrarlo con db e ascoltare inserire eventi.

4

In aggiunta alla risposta di @kotabek, Spring Batch ha la capacità di avviare processi tramite messaggi. In questo modo è possibile fare in modo che JobLaunchingMessagHandler ascolti le richieste per avviare un lavoro ed eseguirlo di conseguenza. Ciò consente di gestire questo caso d'uso sia localmente (con canali diretti) che remotamente (tramite alcuni middleware di messaggistica come Rabbit). Puoi leggere maggiori informazioni nella documentazione qui: http://docs.spring.io/spring-batch/reference/htmlsingle/#launching-batch-jobs-through-messages

3

Se stai utilizzando Spring 4, dai un'occhiata all'annotazione di Google.

Esempio:

@Component 
public class ScheduledTasks { 

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 

    @Scheduled(fixedRate = 5000) 
    public void reportCurrentTime() { 
     System.out.println("The time is now " + dateFormat.format(new Date())); 
    } 
} 

codice di riferimento - https://spring.io/guides/gs/scheduling-tasks/

Una piccola nota: Non dimenticare di aggiungere @EnableScheduling nella vostra configurazione.

Problemi correlati