2009-10-23 2 views
1

Est-il possible de configurer un point de terminaison pour qu'il agisse comme un ouvrier récupérant des tâches d'un distributeur ET s'abonnant à un type de message?Cofiguration d'un point de terminaison pour qu'il soit à la fois travailleur et abonné

J'ai le scénario suivant (adapté à la vente terminologie)

*) un service central publie chaque maintenant et puis une liste des nouveaux prix. Tous les travailleurs doivent être informés. Cela signifie qu'un travailleur devrait s'abonner à cet événement. *) Lorsqu'une nouvelle commande arrive à la centrale, elle l'envoie au distributeur, qui l'envoie au prochain travailleur inactif à traiter. Cela signifie qu'un travailleur doit être configuré pour recevoir des messages du distributeur. J'utilise la configuration suivante:

<MsmqTransportConfig 
    InputQueue="worker" 
    ErrorQueue="error" 
    NumberOfWorkerThreads="2" 
    MaxRetries="5" 
    /> 

    <UnicastBusConfig 
    DistributorControlAddress="distributorControlBus" 
    DistributorDataAddress="distributorDataBus" >  
    <MessageEndpointMappings> 
     <add Messages="Events" Endpoint="messagebus" /> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 

Lorsque je configure seulement en tant que travailleur ou seulement en tant que tout abonné fonctionne comme prévu, mais pas quand je configure comme les deux.

J'ai découvert qu'un message arrive à la file d'entrée du central avec l'adresse du distributeur comme adresse de retour au lieu de l'adresse du travailleur, et l'éditeur ne reconnaît aucun abonné dans ce cas. Des idées? Merci d'avance.

Répondre

1

Les travailleurs ne sont pas censés être utilisés de cette façon IFAIK. Je pense que le chemin à suivre serait d'avoir votre centrale souscrite aux prix et quand un "NewOrderMessage" arrive enrichir ces données avec les prix requis (peut-être seulement des prix pour les produits dans cet ordre particulier) et envoyer un nouveau ProcessOrderRequest à l'entrée file d'attente du distributeur.

Une autre façon serait d'avoir le processus qui envoie la demande de commande pour inclure les prix dans la demande de commande.

Cela a-t-il un sens?

/Andreas

+0

C'est comme ça que je le fais maintenant. La liste de prix est jointe au message de commande. Mon intention était de supprimer les messages et d'économiser de la bande passante. Si cela ne fonctionne pas, je peux envisager d'envoyer l'horodatage de la liste de prix actuelle et de laisser le serveur le demander au central en utilisant Bus.Reply(), mais cela signifie aussi que je dois persister les messages jusqu'à ce que la réponse arrive. – Mouk

+0

D'autres façons? Les données dont nous avons besoin sont extrêmement lourdes et ne peuvent pas être transférées sur le réseau – theGecko

+0

TheGecko, nous cherchons à regrouper dans un bus de données pour transmettre de plus grandes quantités de données. –

1

travailleurs derrière un distributeur comment vous un seul l'échelle abonné logique, pas comment vous gérez plusieurs abonnés logiques. Le fait est que seul un travailleur parmi le groupe de travailleurs devrait recevoir un message donné, auquel cas vous voulez que tous les travailleurs aient la même apparence que l'éditeur - c'est pourquoi l'adresse du distributeur est donnée.

Si vous avez plusieurs abonnés logiques que vous souhaitez étendre, attribuez à chacun d'entre eux leur propre distributeur.

+0

Je pense que je comprends le concept des travailleurs maintenant. Lorsqu'un travailleur publie un message, tous les abonnés au point de terminaison du distributeur doivent être avertis. Logique. – Mouk

+0

Certes, plusieurs distributeurs, chacun avec ses propres employés, permettraient seulement de recevoir des messages diffusés par le distributeur et non par les travailleurs? – theGecko

+1

theGecko, lorsqu'un travailleur publie un message, il définit l'adresse de retour de ce message comme étant l'adresse de son distributeur, de sorte que les abonnés apparaissent en tant que distributeur. J'espère que cela répond à votre question. –

Questions connexes