2017-01-23 1 views
0

J'essaie actuellement de trouver la meilleure solution pour le problème suivant en utilisant NServiceBus: J'ai une interface graphique que l'utilisateur peut utiliser pour rechercher différentes choses, mais les informations sur ces choses sont réparties dans plusieurs services/bases de données. Disons par exemple que l'utilisateur est à la recherche d'une liste de parcs dans une ville, mais chaque district de cette ville ne conserve que les informations de ses parcs dans sa propre base de données (qu'il expose par des services web). J'ai besoin de NServiceBus pour envoyer un message à chaque point de terminaison (district) de quelle information l'utilisateur a besoin, attendre la réponse, puis quand il l'obtient de tous les points de terminaison (et seulement ensuite) le renvoyer à l'utilisateur (GUI). L'utilisateur est uniquement intéressé par les informations complètes. Le bus doit donc savoir si chaque point de terminaison a envoyé sa réponse ou non (il doit également être en temps réel). Le bus supposera que le terminal est hors ligne et enverra un message d'échec si cela prend trop de temps.). Les points de terminaison peuvent changer à tout moment, de sorte que le code doit être facile à maintenir. La meilleure option consiste à ajouter/supprimer des points de terminaison sans modifier le code.Comment rechercher des données à partir de plusieurs points de terminaison dans NServiceBus?

Voici mes réflexions sur des solutions possibles:

  • modèle publish/subscribe me permet d'envoyer facilement un message à plusieurs points de terminaison et ajouter/supprimer des points d'extrémité à volonté en vous inscrivant/désabonnement sans changer le code de l'éditeur. Problème: Par définition, l'éditeur ne sait pas combien d'abonnés sont présents (et ce qu'ils sont), alors attendre que tous les abonnés répondent devient difficile, voire impossible. Le modèle de requête/réponse me permet de dire facilement aux points de terminaison que je veux répondre et je saurai si le point de terminaison a encore répondu. Problème: Chaque fois que je dois ajouter/supprimer un nouveau point de terminaison, je dois changer le code de l'expéditeur. Également l'évolutivité peut être un problème.

Ma question: Est-il possible de combiner ces modèles? Ou est-ce que je regarde mal ce problème? Y a-t-il un moyen de réaliser tout ce que je veux?

Répondre

0

Je pense que vous regardez effectivement le problème dans le mauvais sens.

On dirait que vous voulez interroger plusieurs services et regrouper les informations pour la présentation dans l'interface utilisateur. De manière générale, un bus n'est pas un bon choix pour interroger directement. Un bus est idéal pour envoyer des commandes à un point de terminaison spécifique et pour publier les modifications d'état lorsqu'elles se produisent.

Si vous effectuez une requête sur un point final, votre meilleur pari serait de modéliser et d'exposer une requête (par quelque chose comme WebAPI).