2008-11-05 10 views
4

Je cherche à utiliser le quartz pour programmer des e-mails, mais je ne suis pas sûr de l'approche à adopter:Devrais-je créer un nouveau travail à quartz et déclencher ou un travail et de nombreux déclencheurs?

  1. Créer un nouvel emploi et chaque fois qu'un déclencheur email est prévue OU
  2. Créer un seul emploi et créer un nouveau déclencheur chaque fois qu'un email est programmé

Je dois passer le message/destinataire etc. de toute façon, et je ne suis pas sûr que la création de tas de travaux commencera à ajouter des frais généraux de mémoire considérables, car il y aura tout à fait peut-être être des milliers d'emails programmés.

Mise à jour: Ces e-mails seront planifiés par les utilisateurs, pas par moi - donc je vais les ajouter par programmation lors de l'exécution, ils ne sont pas programmés pour sortir à un moment donné.

Répondre

6

Quartz est prévu pour gérer des dizaines de milliers de déclenchements. La limite principale de l'évolutivité est ici l'espace disponible dans votre JobStore. Un JDBCJobStore sauvegardé avec une base de données raisonnable devrait être capable de gérer des centaines de milliers de déclencheurs.

Si un seul travail peut être paramétré via la mappe de données de travail du déclencheur, créez un travail unique et un déclencheur pour chaque courrier électronique. Quartz interroge périodiquement le magasin d'emploi pour rechercher des déclencheurs prêts à être déclenchés. Quartz est conçu pour gérer en toute sécurité des ensembles de résultats arbitrairement importants à partir de cette requête.

Ce qui compte — et cela n'a vraiment rien à voir Quartz lui-même — est que vous avez la bande passante nécessaire pour exécuter des charges de pointe. Si les utilisateurs ont tendance à programmer des messages en groupes, vous devez vous assurer que vous disposez des ressources informatiques pour extraire les messages. Cela inclut la bande passante réseau, le traitement et suffisamment de threads de travail configurés pour utiliser les ressources disponibles.

Notez que vous pouvez configurer ce que Quartz doit faire avec un déclencheur s'il est trop loin dans l'exécution des travaux. Vous pouvez continuer à essayer, sauter la gâchette, etc.

+0

Salut Erickson, Il sera configurable via jobDataMap du trigger, (ce que je n'avais pas réalisé existe), donc je vais aller avec cette façon de faire les choses. Je vais mettre le déclencheur pour continuer à essayer si elle échoue - ne peut pas manquer les e-mails juste parce qu'un autre est en cours de génération à ce moment-là ... Merci. – RodeoClown

0

Vous pouvez envisager de mettre en file d'attente ou de grouper d'une autre manière un ensemble d'e-mails et d'effectuer un (ou plusieurs) travail (s) périodique (s) périodique (s) prenant en charge le 'lot'.

Vous pourriez même faire en sorte que le travail Quartz fasse la queue dans les courriels pour une collection de travailleurs à consommer et à envoyer.

Je ne recommanderais pas des milliers de travaux/triggers Quartz - ce n'est tout simplement pas l'utilisation prévue de l'outil (IMHO).


EDIT: En réponse au commentaire ci-dessous:

Je ne recommanderais pas des milliers d'emplois Quartz/déclenche lorsqu'il est utilisé dans le cadre d'un cadre d'exécuter une application dans la même machine virtuelle Java, les emplois/déclencheurs être en concurrence pour les ressources avec le reste de l'application.

+1

"Quartz peut être utilisé pour créer des planifications simples ou complexes pour exécuter des dizaines, des centaines, voire des dizaines de milliers de tâches, des tâches dont les tâches sont définies comme des composants Java standard ou des EJB." - Quartz Home Page – erickson

+2

Les auteurs de Quartz recommandent de l'utiliser pour des centaines de milliers d'emplois. Tordre les outils dans des rôles pour lesquels ils n'étaient pas conçus est l'une de mes bêtes noires, car cela crée toujours des problèmes. Mais dans ce cas, Quartz était expressément conçu pour évoluer de cette manière. – erickson

+0

Je pense que nous sommes plus proches de l'accord qu'il n'y paraît. Quartz, fonctionnant seul, peut gérer autant de tâches/triggers que vous voulez le lancer. Quand je l'utilise dans un framework d'application, je ne veux pas qu'il soit en concurrence avec l'application Web pour les ressources, donc je limiterais le nombre de jobs/triggers. –

1

Les déclencheurs doivent-ils être basés sur un calendrier? Vous pouvez utiliser un CronTrigger pour configurer une planification basée sur le temps plus complexe plutôt que des déclencheurs individuels.

+0

Ils seront sur un calendrier, mais ce sont des e-mails différents pour différentes personnes, donc avoir le feu de déclenchement plus d'une fois ne va pas vraiment accomplir beaucoup. – RodeoClown

+0

Il suffit de lire la mise à jour. Cela ne signifie-t-il pas que vous devrez créer plusieurs déclencheurs de toute façon (à l'exécution)? Comme de nombreux utilisateurs peuvent faire des horaires différents? – Feet

+0

Oui, il y aura beaucoup de déclencheurs, mais je me demandais s'il était préférable d'essayer et de réduire le nombre de tâches, donc beaucoup de déclencheurs pour un seul travail. – RodeoClown

0

Je recommanderais un travail et un déclencheur. Placez les demandes d'e-mail dans une table de base de données et demandez au travail à quartz de rechercher les nouveaux e-mails à envoyer.