Sto attraversando un periodo difficile per capire come progettare l'ultimo pezzo del mio sistema. Attualmente sto utilizzando un server Tomcat con un servlet che risponde alle richieste dei client. Ogni richiesta a sua volta aggiunge un messaggio di elaborazione a una coda asincrona (probabilmente userò JMS tramite Spring o più probabilmente Amazon SQS).Qual è il modo migliore per elaborare una coda asincrona continuamente in Java?
La sequenza degli eventi è questo:
lato invio:
1. Prendere una richiesta del client
2. Aggiungere alcuni dati in un DB relativi a questa richiesta con un ID univoco
3. Aggiungere un oggetto messaggio che rappresenta la richiesta alla coda di messaggi
Ricezione lato:
1. Estrarre un nuovo oggetto messaggio dalla coda
2. Separa l'oggetto e grab alcune informazioni da un sito web basate sulle informazioni contenute nell'oggetto msg.
3. Invia un avviso e-mail
4. aggiornare la mia riga DB (stesso ID univoco) con le informazioni relative al completamento dell'operazione per questa richiesta.
Sto avendo un difficile capire come affrontare correttamente il lato ricevente. Da un lato, posso probabilmente creare un semplice programma java che avvio dalla riga di comando che seleziona ogni elemento in coda e lo elabora. È sicuro? Ha più senso avere quel programma in esecuzione come un altro thread all'interno del contenitore Tomcat? Non voglio farlo in serie, il che significa che il destinatario deve essere in grado di elaborare diversi oggetti alla volta - utilizzando più thread. Voglio che questo sia sempre attivo, 24 ore al giorno.
Quali sono alcune opzioni per la costruzione del lato ricevente?
Nel caso qualcuno fosse interessato a ciò che alla fine ho finito di fare. Ho usato SQS di Amazon e ho un client java (utilizza la struttura a molla) che esegue il polling della coda. Quando trova un messaggio, lo elabora e torna in stato di attesa. Potrei aggiungere il threading del quarzo, perché ora ho appena avviato più processi. – Ish
Sto affrontando un problema simile. Mi piacerebbe sapere come è stato implementato il client Java. Spero che non venga eseguito in un ciclo infinito mentre si raggruppa per il messaggio? –