2011-11-21 3 views
5

Je suis en train de mettre en œuvre un système de messagerie où des programmes externes appelés agents peuvent communiquer via des producteurs ZeroMq. Ainsi, chaque fois qu'un événement d'intérêt se produit, l'agent envoie un message à ZeroMq.Modèle de pipeline ZeroMQ

Je suis intéressé par la mise en œuvre de ce modèle en utilisant pipeline.

J'ai trouvé quelques exemples (Ventilator-Worker-Results Manager), mais le composant Ventilator crée un point de terminaison pour accepter les connexions du worker, puis envoie tous les messages par lot.

Mon scénario est assez différent. Le "agent" se connecte chaque fois qu'un événement est nécessaire pour être envoyé - il n'attend pas les connexions des travailleurs, donc je me demande si c'est possible? En outre, le fait important est que les messages doivent être traités dans l'ordre où ils ont été envoyés.

Répondre

2

Vous devez mélanger les motifs pour obtenir votre solution. Je pense qu'il devrait être un specialized broker qui instancie REP collecteurs d'agent pour les vrais agents REQ. Ces agents collecteurs doivent prendre soin de la commande avant de communiquer avec le système.

+0

Cela pourrait être une bonne solution, sauf que je n'ai pas besoin de communication bidirectionnelle ici. L'agent n'a pas besoin de savoir si le message a été envoyé au courtier - il doit simplement l'envoyer. – Nedo

+0

Je ne suis pas sûr, mais [AFAIK] (http://en.wiktionary.org/wiki/AFAIK), il n'y a aucune notion de sockets unidirecional dans ZeroMQ. Si vos agents REQ doivent rester connectés avec le courtier, fermez le socket chaque fois qu'un événement est envoyé. –

1

REQ-REP est quand vous voulez un aller-retour. On dirait que vous voulez un PUB-SUB. Configurez un SUB avec une liaison sur un port connu, puis demandez aux clients de se connecter à ce port et d'émettre un PUB.