Je suis nouveau sur NServiceBus mais je l'utilise actuellement avec SQL Server Transport pour envoyer des messages entre trois machines: l'une appartient à un noeud final appelé Server
et deux appartiennent à un noeud final appelé Agent
. Cela fonctionne comme prévu, avec les messages envoyés au point de terminaison Agent
distribué à l'une des deux machines via le round-robin par défaut.Rediriger le message NServiceBus basé sur la disponibilité Endpoint
Je souhaite maintenant ajouter un nouveau point de terminaison appelé PriorityAgent
avec une file d'attente différente et deux machines supplémentaires. Bien que tous les points de terminaison utilisent le même type de message, je sais où chaque message doit être traité avant de l'envoyer, donc normalement je peux simplement choisir le bon point de destination et le message sera traité en conséquence.
Cependant, je dois construire dans un cas particulier: si toutes les machines sur le point de terminaison PriorityAgent
sont actuellement bas, les messages qui doivent normalement être envoyés devraient y être envoyés à l'extrémité Agent
à la place, afin qu'ils puissent être traités sans délai. D'autre part, si toutes les machines sur le point de terminaison Agent
sont actuellement en panne, tous les messages Agent
ne doivent pas être envoyés à PriorityAgent
, ils peuvent simplement attendre le retour d'une machine Agent
.
J'ai recherché la bonne manière de mettre en œuvre ceci, et n'ai pas vu beaucoup de résultats. J'imagine que ce n'est pas un scénario inédit, donc mon hypothèse est que je cherche les mauvaises choses ou que je pense à ce problème de la mauvaise façon. Pourtant, je suis venu avec quelques solutions possibles:
piste séparément les battements de coeur de
PriorityAgent
machines et ajouter un mutator ou le comportement de changer la destination des messages sortantsPriorityAgent
au point d'extrémitéAgent
si ces battements de cœur arrêtent.Donnez
PriorityAgent
messages à une courte expiration, et en quelque sorte gérer l'expiration de rediriger les messages vers le point de terminaisonAgent
. Je ne suis pas sûr que ce soit réellement possible.
L'une de ces solutions est-elle sur la bonne voie, ou suis-je entièrement hors-base?
Merci pour l'entrée. Déployer 'PriorityAgent' sur les machines' Agent' en tant que sauvegarde est une bonne idée, qui a été bloquée par une exigence du client selon laquelle les machines 'Agent' ne traitent que les messages' PriorityAgent' en cas de panne. Cependant, nous avons été en mesure de modifier les exigences de telle sorte que nous puissions maintenant installer le serveur 'PriorityAgent' sur les serveurs' Agent' et le laisser, ce qui permettrait au client de l'activer manuellement si cela devenait nécessaire. Cela devrait nous permettre de continuer à utiliser NServiceBus d'une manière cohérente avec son intention. – mdk