2016-05-02 3 views
0

Ich habe eine PUSH/PULL Muster in 0MQ (Python-> C#) mit nur einem PUSH Socket und einem PULL Socket. Solange beide verbunden sind, unabhängig davon, wie lange es dauert, bis der Worker die Nachricht verarbeitet, bleibt die Reihenfolge der Nachrichten in der Warteschlange erhalten. Das Problem ist, wenn der Mitarbeiter für eine Weile die Verbindung trennt und dann wieder verbindet, dann alle Nachrichten, die in diesem Zeitraum in der Warteschlange eingereiht wurden, in beliebiger Reihenfolge ankommen, egal wie sie in die Warteschlange von PUSH Socket wurden. Gibt es eine integrierte Lösung für dieses Problem oder sollte ich ein fortgeschritteneres Muster verwenden?0MQ PUSH/PULL Bestellung defekt Wenn keine PULL-Steckdosen angeschlossen sind

füge ich den Code auf der Seite PULL:

using (var receiver = new PullSocket()) 
      { 
       receiver.Bind("tcp://localhost:5557"); 

       while (true) 
       { 
        var payload = receiver.ReceiveFrameString(); 

        log.Debug($"Payload: {payload}"); 
       } 
      } 
+0

Das eigentlich ziemlich komisch. zeromq garantiert keine Bestellung, sollte aber in der Nähe bestellt werden. Welchen Transport benutzen Sie? – somdoron

+0

Ich benutze tcp, und nach mehr Tests scheint die Reihenfolge, die ich erhalte, völlig zufällig zu sein – marsop

Antwort

0

Ich bin ziemlich sicher, dass 0mq PUSH/PULL nicht um die Lieferung garantiert.

Vielleicht können Sie REQ/REP (oder REQ/ROUTER oder ein ähnliches Muster) statt - REQ/REP kann sehr nützlich sein, wenn Sie Dinge synchronisieren müssen. Aus der Spitze meines Kopfes, können Sie eine in Bearbeitung PUSH/PULL Warteschlange haben, aus der Sie Nachrichten ziehen und sie in einen REQ-Socket schieben.

Verwandte Themen