Domanda

Al momento ho un contenitore Tomcat - servlet in esecuzione su di esso in ascolto di richieste. Ho bisogno che il risultato di una richiesta HTTP sia un invio a una coda di lavoro che verrà quindi elaborata in modo asincrono. Voglio ogni & Quot; job & Quot; essere persistente in una riga in un DB per il monitoraggio e il ripristino in caso di errore. Ho letto molto. Ecco le mie opzioni (nota che devo usare materiale open source per tutto).

1) JMS - usa ActiveMQ (ma chi è il consumatore del lavoro in questo caso un altro servlet?)

2) Chiedi alla mia richiesta di creare una riga nel DB. Ho un servlet separato nel mio contenitore Tomcat che funziona sempre: utilizza Quartz Scheduler o utilità fornite in java.util.concurrent per elaborare continuamente le righe come lavori (utilizza il pool di thread).

Mi sto rivolgendo a quest'ultimo perché guardare la documentazione di JMS mi fa venire il mal di testa e mentre so che è una soluzione più solida, devo implementarla relativamente rapidamente. Non sto anticipando enormi quantità di carico nei primi giorni della distribuzione di questo server in ogni caso.

Molte persone dicono che Spring potrebbe essere buono per 1 o 2. Tuttavia non ho mai usato Spring e non saprei nemmeno come iniziare a usarlo per risolvere questo problema. Qualche suggerimento su come immergersi senza dover riscrivere il mio intero progetto sarebbe utile.

Altrimenti, se si potesse ponderare sull'opzione 1 o 2, sarebbe utile.

Chiarimento: il processo asincrono consiste nello schermare un sito Web di terze parti e inviare una notifica di messaggio al richiedente originale. Il sito Web di terze parti è un po 'traballante e lento ed è per questo che verrà gestito come un processo asincrono (numerosi tentativi di tentativi integrati). Prenderò anche i file da quel sito e li memorizzerò in S3.

È stato utile?

Soluzione

Il tuo Quartz Job non deve necessariamente essere un Servlet! È possibile mantenere persistenti i lavori in entrata nel DB e avviare Quartz all'avvio del Servlet principale. Il Quartz Job può essere un semplice POJO e controllare periodicamente il DB per eventuali lavori.

Tuttavia, suggerirei di dare un'occhiata a Spring. Non è difficile da imparare e facile da configurare all'interno Tomcat . Puoi trovare molte buone informazioni nella Documentazione di riferimento per la primavera . Ha l'integrazione di Quartz, che è molto più semplice che farlo manualmente.

Altri suggerimenti

Una soluzione adatta che non richiede di progettare e programmare molto è quella di creare l'oggetto necessario in seguito nel servlet e serializzarlo su un array di byte. Quindi inseriscilo in un campo BLOB nel database e completalo.

Quindi il tuo thread di elaborazione può semplicemente leggere il contenuto, deserializzarlo e lavorare con l'oggetto risorto.

Ma potresti ottenere risposte migliori descrivendo ciò di cui il tuo sistema ha effettivamente bisogno per fare :)

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