2010-09-22 5 views
1

Nous développons et application Web qui permet aux utilisateurs de s'inscrire à certains événements. Quelle application est censée faire, est de leur envoyer quelques notifications pour leur rappeler qu'ils se sont inscrits. Il y aura plus de 1k utilisateur qui peut s'inscrire à de nombreux événements dans une très large plage de temps. Nous devons envoyer des notations comme 3 mois, 1 mois, 1 semaine et un jour avant l'événement.Mise en œuvre de la notification dans la webapp

La première chose est que je dois déterminer si j'ai besoin d'envoyer une notification à un utilisateur spécifique.
Je pense au thread qui va itérer sur les enregistrements et déterminer si l'envoi d'une notification est nécessaire ou non. Si une notification est requise, devrais-je le faire tout de suite ou peut-être mettre tous les objets qui en ont besoin dans une sorte de cache et ensuite les envoyer (par un autre thread)? Deuxième chose est: si j'ai fait ce fil - est préférable de le mettre et de courir à côté de l'application ou intégrer ce fil dans l'application et, par exemple, le démarrer dans le contexte d'écoute?

Comment résoudre ce problème? Peut-être qu'il y a de meilleures approches?

Répondre

2

Je ne pondra pas mes propres fils pour cela, j'utiliser un planificateur comme Quartz et exécuter des tâches quotidiennes ou horaires (je ne sais pas ce que vous avez besoin granularité) qui:

  1. trouver des événements à venir en 1 jour, 1 semaine, 1 mois, 3 mois et les utilisateurs qui devraient être notifiés à leur sujet.
  2. créer les notifications et les envoyer

J'implémenteriez probablement que l'utilisation d'emplois distincts (l'envoi de notifications est une préoccupation différente) et la file d'attente ainsi les résultats de la première partie, cela vous donnera plus de flexibilité. Et la première partie pourrait être faite par un travail unique programmé avec des paramètres de temps différents (1 jour, 1 semaine, 1 mois, 3 mois).

+0

Les intervalles de temps entre les notifications peuvent être ajoutés ou modifiés, donc je pense qu'un travail devrait s'exécuter tous les N (où N est l'intervalle le plus bas). L'utilisateur obtient seulement l'information qu'il a l'événement alors et alors. Mais j'aime l'approche du planificateur - je ne savais même pas qu'un tel service existait;) – jjczopek

+0

@jjczopek Il existe d'autres options pour planifier des travaux Java, mais si vous cherchez une solution robuste avec basculement, etc, Quartz est certainement le marche à suivre. –

1

En déposant la question sur la façon de planifier les notifications une fois qu'elles sont identifiées, je recommande de boucler sur les événements à venir, plutôt que sur tous les utilisateurs. Il semble très probable que vous aurez beaucoup plus d'utilisateurs que d'événements (surtout si vous limitez votre analyse à des événements qui se produisent exactement 1 semaine, 1 mois et 3 mois dans le futur).

En ce qui concerne les notifications, je pense que les notifications de marquage à envoyer en premier, puis le traitement de toutes les notifications marquées permettra plus d'optimisation que l'envoi de notifications dans le cadre de votre analyse. Si vous avez une file d'attente de notifications à envoyer, vous pouvez alors envoyer à chaque utilisateur concerné un e-mail incluant plusieurs événements en même temps.