2010-03-17 5 views
1

Je commence avec NServiceBus et j'ai une question sur l'exemple de Pubsub.Plusieurs abonnés dans NServiceBus

Mon intention était que plusieurs instances de Publisher1 s'exécutent et reçoivent le message envoyé par l'éditeur. J'ai également piraté l'éditeur pour envoyer uniquement des messages du type eventMessage.

Mais si je démarre l'éditeur et trois instances de Subscriber1, seul l'un d'entre eux reçoit le message à la fois.

pourquoi est-ce? Est-ce un paramètre de configuration ou autre chose?

C'est ce que j'ai essayé qui retourne une exception « Exception lorsque critère de départ, erreur a été enregistrée Raison:... Impossible de configurer la propriété avant que le composant a été configuré S'il vous plaît appeler « Configurer » abord »:

using NServiceBus; 

namespace Subscriber1 
{ 
    public class EndpointConfig : IConfigureThisEndpoint, AsA_Server 
    { 
    } 

    public class OverrideInputQueue : IWantCustomInitialization 
    { 
     public void Init() 
     { 
      Configure 
       .Instance 
       .Configurer 
       .ConfigureProperty<NServiceBus.Config.MsmqTransportConfig>(t => t.InputQueue, "testQueue"); 
     } 
    } 
} 

/J

Répondre

1

NServiceBus suppose que vous avez une file d'attente d'entrée par processus. Assurez-vous que chacun de vos abonnés est configuré avec une file d'attente d'entrée unique. Si ce n'est pas le cas, tous les trois interrogeront la même file d'attente et produiront le comportement que vous décrivez. Pour ce faire, vous devrez probablement copier le sub1 dans 3 dossiers différents, en modifiant le fichier app.config et en le démarrant.

Espérons que cela aide!

+0

Oui c'est le cas. Mais alors je dois programmer la file d'attente d'une manière ou d'une autre. Droite?? J'ai trouvé quelque chose comme ceci: Configure.Instance.Configurer.ConfigureProperty (t => t.InputQueue, yourDynamicQueue); .. mais n'a pas pu le faire fonctionner. Des astuces? –

+0

Oui, si vous ne pouvez pas copier coller le dossier et modifier le fichier app.config, vous devrez le définir par programme. Jetez un oeil ici: http://tech.groups.yahoo.com/group/nservicebus/message/6378 Pouvez-vous donner plus de détails sur ce que vous essayez de réaliser avec tout cela? S'il s'agit de distribuer la charge, vous devriez utiliser le distributeur: http://nservicebus.com/Distributor.aspx –

+0

Ce que je veux, c'est que plusieurs instances du même client reçoivent toutes des messages lorsque certains événements se produisent. Peut-être que lorsque quelqu'un crée un client, tous les clients reçoivent un flash d'information à ce sujet. –

0

Vous devez utiliser this-

Configure.Instance.Configurer.ConfigureProperty<NServiceBus.Unicast.Transport.Msmq.MsmqTransport>(msmq => msmq.InputQueue, "SomeQueueHere"); 

Assurez-vous que vous utilisez MsmqTransport et non MsmqTransportConfig que vous avez mentionné.

Questions connexes