2017-01-11 4 views
0

ich mich gefragt, ob es einen Weg gibt Ereignisse auf neues Abonnement an einen Verlag BuchseZeroMQ Verlag socket - erhöhen Veranstaltung auf Abonnement

Zum Beispiel zu erhöhen:

 PublisherSocket publisher = new PublisherSocket(); 

     publisher.Bind("tcp://*:5555"); 

     NetMQPoller poller = new NetMQPoller { publisher }; 
     poller.RunAsync(); 

     poller.OnSubscription += topic => 
     { 
      AddToPool(topic); 
     }; 

     Task.Factory.StartNew(() => 
     { 
      SubscriberSocket sub = new SubscriberSocket(); 
      sub.Connect("tcp://127.0.0.1:5555"); 

      Thread.Sleep(1000); 
      sub.Subscribe("A"); 
     }, TaskCreationOptions.LongRunning); 

     publisher.ReceiveReady += Publisher_ReceiveReady; 

Natürlich OnSubscription doesn Es gibt sie wirklich nicht, aber ich habe mich gefragt, ob es einen Weg gibt.

Ich brauche meinen Server, um alle Abonnements zu kennen.

ich aber über zwei Möglichkeiten, es zu implementieren:

  1. Erstellen Sie eine zusätzliche Router-Steckdose im Server, alle Abonnements werden beide Buchse an den Verlag gesendet werden und an den Router-Buchse (Abmeldungen als auch). Dadurch kann ich die Abonnements vom Router abfragen.

  2. Publisher/Subscriber überhaupt nicht verwenden, alle Pubsub-Mechanismen mit Router/Dealer erstellen.

Was würden Sie mir vorschlagen?

+0

Wie im ZeroMQ Guide beschrieben, ist es nicht möglich, Subskriptionen zu verfolgen, sondern einen Blick auf [Advanced Pub-Sub-Pattern] (http://zguide.zeromq.org/page:all#Reliable-Pub-Sub -Clone-Pattern) finden Sie ein Reliable-Pub-Sub (Clone) Pattern, das eine zweite ROUTER/DEALER-Buchse verwendet, um das zu erreichen, was Sie wollen – dwonisch

Antwort

1

Wenn Sie einen XPUB- anstatt PUB-Socket verwenden, können Sie die Abonnementnachrichten wie normale Nachrichten auf einem anderen Socket-Typ empfangen.

+0

Es mag gerecht sein, dass ein ** [An Answer] * * und ** [Ein Lösungsvorschlag] ** sind zwei verschiedene Dinge. ** [Eine Antwort] sollte "Nein, es gibt keinen solchen Mechanismus ** in ZeroMQ-Transport-Services für OnSubscription() -Funktionalitäten **, aber es ist möglich, ein solches Verhalten ** als zusätzliche Signalisierung hinzuzufügen, indem ein separater Transport verwendet wird Archetyp oder die Verwendung desselben, aber erweiterten Archetyps "XPUB/XSUB", der Mittel für die codebasierte Signalisierung eines solchen Ereignisses bereitstellt und es der Gegenseite erlaubt, Aktionen wie "Raise" zu ergreifen ... "Das wäre sowohl wahr als auch Messe. – user3666197

+0

@David Vielen Dank für die Antwort, ich habe überprüft und es ist in der Tat der Fall, ich kann Abonnements, Abmeldungen über XPublisherSocket hören. Es wird immer noch nicht zuverlässig genug für mich sein. Mein Plan ist es, einen Server zu erstellen, der ein Abonnement-Ereignis auslöst, wenn jemand mit dem Abonnieren eines Abonnements beginnt und ein Abmelde-Ereignis auslöst, wenn niemand mehr dieses Thema abonniert hat. Dazu muss ich alle Themen und die Identität der Clients im Auge behalten und einen Heartbeat-Mechanismus implementieren, um getrennte Clients zu verfolgen. – areller

+0

@David Ich denke, dass Router-Socket ist besser geeignet für letztere, da es alle Clients Identitäten out of the Box kennt. Außerdem konnte ich mit XPublisher keinen Heartbeat implementieren, da ich keine Nachrichten lesen kann, die für Abonnements nicht relevant sind. – areller