Domanda

Sto cercando di utilizzare quarzo per pianificare le e-mail, ma non sono sicuro di quale approccio adottare:

  1. Crea un nuovo lavoro e attiva ogni volta che viene programmata un'email O
  2. Crea un singolo lavoro e crea un nuovo trigger ogni volta che viene pianificata un'e-mail

Devo passare il messaggio / destinatario ecc. in entrambi i modi e non sono sicuro che la creazione di un sacco di lavori inizierà ad aggiungere notevoli spese generali di memoria, poiché molto probabilmente ci saranno migliaia di e-mail programmate.

Aggiorna : queste e-mail saranno programmate dagli utenti, non da me - quindi le aggiungerò a livello di programmazione in fase di esecuzione, non sono programmate per uscire in qualsiasi momento.

È stato utile?

Soluzione

Il quarzo è progettato per gestire decine di migliaia di trigger. Il limite principale alla scalabilità qui è lo spazio disponibile nel tuo JobStore. Un JDBCJobStore supportato da un database ragionevole dovrebbe essere in grado di gestire centinaia di migliaia di trigger.

Se è possibile parametrizzare un singolo lavoro tramite la mappa dei dati del lavoro del trigger, creare un singolo lavoro e un trigger per ciascuna e-mail. Quartz esegue periodicamente il polling del negozio di lavoro alla ricerca di trigger pronti per l'attivazione. Quartz è progettato per gestire in modo sicuro set di risultati arbitrariamente grandi da questa query.

Ciò che conta & # 8212; e questo non ha davvero nulla a che fare con lo stesso Quartz & # 8212; è che hai la larghezza di banda necessaria per eseguire i carichi di picco. Se gli utenti tendono a pianificare la posta in gruppi, è necessario assicurarsi di disporre delle risorse di elaborazione per inviare le e-mail. Ciò include larghezza di banda della rete, elaborazione e thread di lavoro sufficienti configurati per utilizzare le risorse disponibili.

Nota che puoi configurare cosa dovrebbe fare Quartz con un trigger se si trova troppo indietro nell'esecuzione dei lavori. Puoi continuare a provare, saltare il grilletto, ecc.

Altri suggerimenti

I trigger devono essere basati su una pianificazione temporale? Puoi utilizzare un CronTrigger per impostare una pianificazione basata sul tempo più complessa piuttosto che singoli trigger.

Potresti prendere in considerazione la possibilità di mettere in coda o raggruppare in altro modo un insieme di e-mail e di avere uno o più lavori periodici (o programmati) singoli che si occupano quindi del "batch".

Potresti anche fare in modo che il lavoro Quartz metta in coda le e-mail per il consumo e l'invio di una raccolta di lavoratori.

Non consiglierei migliaia di lavori / trigger Quartz - semplicemente non è l'uso previsto dello strumento (IMHO).


EDIT: in risposta al commento qui sotto:

Non consiglierei migliaia di lavori / trigger Quartz se usati come parte di un framework che esegue un'applicazione nella stessa JVM, I lavori / trigger competeranno per le risorse con il resto dell'applicazione.

Consiglierei un lavoro e un trigger. Inserisci le richieste e-mail in una tabella di database e fai in modo che il processo al quarzo cerchi nuove e-mail da inviare.

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