2010-04-23 5 views
7

Attualmente sto utilizzando Quartz Scheduler per attività asincrone come l'invio di una e-mail quando si verifica un'eccezione, l'invio di una e-mail dall'interfaccia web o l'analisi periodica del traffico.Message Queue or Scheduler

Devo utilizzare una coda di messaggi per inviare una e-mail? È più efficace o corretto farlo in quel modo? L'approccio dello scheduler funziona bene.

Se si utilizza una coda e l'e-mail non è stata inviata, è possibile che la coda riprovi a inviare l'e-mail in un secondo momento? L'approccio alla coda sembra più semplice dello scheduler per le attività che devono essere eseguite immediatamente, ma per le attività dello scheduler, lo scheduler è ancora disponibile, a meno che non ci sia più in coda di quanto ne sappia io.

Non ho ancora usato JMS, quindi questo è quello che ho letto.

Walter

risposta

2

Sono davvero diversi e dipende dallo scopo e dalla frequenza che si desidera inviare una e-mail. Lo scheduler genera un evento basato sul tempo e quindi esegue un codice per inviare un messaggio di posta elettronica. Una coda non ha modo di attivare un evento, deve avere un messaggio messo da qualche parte e poi un MessageListener invia un messaggio di posta elettronica.

per rispondere alla tua domanda una coda è un buon strumento per inviare un'e-mail se

  1. Il messaggio deve essere messo di nuovo in coda se l'operazione non riesce, anche se SMTP non sa se l'email ha raggiunto la sua destinazione.
  2. Alcuni trigger possono mettere un messaggio su la coda.

Lo scheduler può eseguire alcuni codici java a un determinato intervallo e pertanto genera eventi temporali. Se si desidera inviare e-mail periodiche, allora lo scheduler è la strada da percorrere.

Se si utilizza lo scheduler, è necessario che lo scheduler inserisca un messaggio in coda. In caso contrario, è necessario disporre di qualche altro trigger per mettere un messaggio in coda.

+0

Romain: suona bene. Ho accettato il tuo commento perché è un po 'più descrittivo. Penso che andrò con una coda allora. Se l'email non viene inviata, la mia modalità di errore sarebbe provare un altro tipo di notifica. –

+1

@Walter White Email non è un sistema di consegna garantito. Se devi consegnare questa email, hai diverse opzioni. 1) Pubblicalo sul tuo sito web e consenti alla persona di accedere e visualizzare gli aggiornamenti sul suo account. 2) Inserisci un URL nella tua e-mail per fare in modo che facciano clic se hanno ricevuto la posta, se non continuano a inviare periodicamente. Ancora non è garantito, sai solo quando ce l'hai. 3) Inviare una lettera con l'e-mail (diciamo che si tratta di informazioni sull'account di una banca) La lettera può essere registrata se necessario. 2) –

+0

In realtà trovo che usare uno scheduler come Quartz sia una buona idea per questo; quando si usano quelli persistenti, sopravvivranno agli arresti, e c'è un meccanismo di retry naturale incorporato. – Eelco

2

Una coda sarebbe una scelta più naturale per l'invio di cose come e-mail. Il quarzo può essere incorniciato da una scarpa, ma non è un adattamento naturale quando si tenta di riprovare. Uno scheduler è più adatto a esattamente quello che suggerisce il nome - attività che dovrebbero verificarsi periodicamente.

+0

Non sono d'accordo con l'idea che uno scheduler è solo per le attività che si verificano periodicamente. Secondo me non c'è niente di sbagliato nell'usarlo per una tantum. Se utilizzi lavori persistenti con Quartz, sopravviverà agli arresti e funzionerà in un cluster e potrai facilmente contrassegnare un lavoro per la riesecuzione quando non riesce. Vedi http://bit.ly/eiSkRS – Eelco

1

Sono d'accordo, con Tom, che tale comunicazione asincrona è fatta meglio attraverso la coda. Che funziona come un modello di sottoscrizione di pubblicazione seguendo il modello di osservatore.