2010-03-18 13 views
3

Quand je souscris en tant que destinataire d'un certain type de message en utilisant NServiceBusQue se passe-t-il lorsque je m'abonne à un message avec NServiceBus?

Bus.Subscribe<MyMessage>() 

Que suis-je en train de faire? Est-ce que je spécifie qu'une méthode particulière sur le type de destinataire sera invoquée lors de la réception du message? Si oui, dans quel contexte la méthode s'exécute - dans un contexte statique, ou dans le contexte d'une nouvelle instance de classe parent (et si oui, comment NServiceBus sait-elle quel constructeur utiliser)?

Répondre

8

Un message est envoyé à l'éditeur en lui disant "Bonjour, je m'appelle 'queue @ abonné-machine' et je souhaite m'abonner aux événements 'MyMessage' - donc envoyez-moi ces messages lorsque vous les publiez." L'éditeur stocke cette information. Lorsque l'éditeur publie des événements MyMessage, ceux-ci sont placés dans la file d'attente d'entrée de l'abonné. Du côté de l'abonné, le message est traité comme tous les autres - toutes les classes qui implémentent IHandleMessage <T> où T est polymoriquement compatible avec le message sont invoquées dans l'ordre approprié.

+0

Cela ne répond pas à la partie "dans un contexte statique" de la question. Le conteneur IoC doit-il utiliser un objet gestionnaire statique? – JarrettV

+1

Il crée une nouvelle instance de la classe pour chaque message afin que tout soit thread-safe par défaut. –