2011-12-15 2 views
0

Je suis à la recherche de conseils de conception ici plus de solutions réelles, mais bienvenue à la fois.modèle de messagerie cumulatif

Le scénario est que j'ai un éditeur qui est responsable de la publication des mises à jour effectuées par les utilisateurs dans un système. Mes systèmes en aval sont les abonnés à ces mises à jour. Le défi que j'ai à relever est que les utilisateurs du système en amont enregistrent régulièrement leur travail. La raison pour laquelle ils font ceci est parce qu'une mise à jour «logique» implique réellement la transition de beaucoup d'écrans plus il est également normal pour eux d'être multitâche sur d'autres choses et ainsi ils frappent «économisent» beaucoup. Chaque fois qu'ils frappent, nous recevons un message.

Donc, pour chaque mise à jour "logique" nous avons peut-être 5-10 messages de mise à jour individuels, dont certains pourraient être dupliqués.

Cela entraîne une surcharge pour les utilisateurs de mes systèmes en aval, qui sont submergés par le volume de mises à jour. Pour chaque mise à jour, ils doivent d'abord vérifier si cela représente un travail "exécutable", et le rejeter si ce n'est que le résultat d'une sauvegarde en amont.

Je sais que la meilleure solution serait de changer le système en amont pour regrouper les sauvegardes en une seule mise à jour, mais cela serait trop coûteux car cela impliquerait le fournisseur.

Édition: Il n'y a pas de données de séquencement dans les messages. Donc, quand nous recevons la mise à jour, il n'y a aucun moyen de dire à quel point l'utilisateur est «loin». Ils auraient pu tout finir en une seule fois, ou seulement 10% du temps et nous aurons 10 autres mises à jour avant la fin.

Éditer: spécifiquement J'utilise BizTalk comme plate-forme de messagerie.

Édition: Le modèle que je souhaite implémenter est l'agrégateur - http://eaipatterns.com/Aggregator.html. Le problème est que je n'ai aucun moyen de savoir quand la série de messages qui composent l'entrée est complète ou non.

+0

Désolé, je ne peux pas obtenir un point principal de la question – sll

+0

Je cherche des suggestions sur la façon dont les autres aborderaient ce problème. J'ai besoin de réduire le volume de messages à mes systèmes en aval en "groupant" les messages d'une manière cohérente –

+0

Peut-être que vous cherchez le modèle [Message Sequence] (http://eaipatterns.com/MessageSequence.html)? Ainsi, les utilisateurs peuvent commencer à gérer les mises à jour lorsqu'ils reçoivent une mise à jour avec 'SequenceNumber == SequenceSize' – sll

Répondre

0

J'ai décidé d'implémenter une variante du modèle d'agrégateur par laquelle le message par défaut (le plus récent) est choisi dans l'échange collectif. Cependant, pour le "trigger" (l'ensemble des conditions qui indiquent que l'agrégation est complète), plutôt que de compter sur l'achèvement de la série, une fenêtre de service sera définie à un certain moment chaque jour.

Espérons que cela aide les autres.