... oder wie behandelt zmq mit Clients, die trennen? Gibt es eine Art Timeout für eine Warteschlange, in der es weiterhin Nachrichten empfangen kann, wenn der Client die Verbindung trennt, aber nach so vielen Sekunden nach sich selbst aufräumt?Was ist die ZeroMQ-Eigenschaft von RabbitMQs "x-expires" -Argument?
Antwort
See: http://api.zeromq.org/2-1:zmq-setsockopt
ZMQ Buchsen haben ein Konzept der Hochwassermarke.
Aus der Dokumentation:
The high water mark is a hard limit on the maximum number of outstanding messages ØMQ shall
queue in memory for any single peer that the specified socket is communicating with.
If this limit has been reached the socket shall enter an exceptional state and depending on
the socket type, ØMQ shall take appropriate action such as blocking or dropping sent messages.
Für jede Art von ZMQ Buchsen (REQ, REP, PUB, SUB, etc.) können Sie das Dokument überprüfen es Verhalten ist - wenn es Blöcke von Nachrichten zu senden oder fällt sie.
Wenn der Client die Verbindung trennt, werden meist die Nachrichten gelöscht. Wenn das für Sie wichtig ist, müssen Sie die Persistenz und Zuverlässigkeit der Nachrichten zusätzlich zu den ZMQ-Mustern erstellen.
Es gibt verschiedene Strategien, die Sie verwenden können, und es hängt von Ihren Bedürfnissen ab (keine Antwort passt für alle).
Wenn der Client die Verbindung trennt, wird im Allgemeinen die Warteschlange auf der Serverseite gelöscht. Dies gilt für PUB-SUB-Flüsse und PUSH-PULL-Flüsse.
Wenn Sie häufige Unterbrechungen behandeln möchten, können Sie ROUTER-DEALER verwenden und eine Identität für die Verbindung festlegen (auf der DEALER-Seite, vor dem Anschließen). Dann wird der ROUTER Nachrichten für den HÄNDLER in die Warteschlange stellen, selbst wenn er weggeht und zurückkommt. Sie können dann die Größe dieser Warteschlange mit dem HWM begrenzen.
Wenn Sie Zeitlimits benötigen, ist es ein wenig komplizierter, da ZeroMQ Nachrichten entweder für immer aufbewahrt oder sie sofort löscht, wenn sie nicht in die Warteschlange gestellt werden können. Sie müssen Nachrichten in Ihren eigenen Listenstrukturen auf dem Server einreihen, den HWM auf 1 setzen und nicht blockierende Nachrichten verwenden, um sie aus Ihrer Warteschlange zu entfernen, da dort Platz für sie ist. Dann können Sie die Clients selbst ablaufen lassen und die damit verbundenen Warteschlangen löschen. Es klingt wie Arbeit, ist aber ziemlich einfach.
- 1. Was ist das korrekte Argument für ForeignKeyRawIdWidget?
- 2. Was ist das Argument didFinishLaunchingWithOptions in AppDelegate
- 3. survfit.coxph: Was ist das Argument newdata?
- 4. Was ist das übergeordnete Argument für?
- 5. Was ist der Zweck von & vor dem Argument einer Funktion?
- 6. was ist die Verwendung von stringsByAppendingPaths
- 7. Was ist die Verwendung von "??"
- 8. Das Argument context_instance von render_to_string ist veraltet
- 9. Was ist das BOOL * stop Argument für enumerateObjectsUsingBlock: verwendet für?
- 10. Was ist das korrekte Argument für d3.brushSelection()?
- 11. socket.io socket.set und socket.get - für was ist das Callback-Argument?
- 12. call_command Argument ist erforderlich
- 13. Was ist die MinUptime
- 14. Was ist der zweite Parameter/Argument zu CSV.open() in Ruby?
- 15. Argument Out Of Range Exception, was zu tun ist
- 16. Was ist das Argument "Kapazität" für in tf.train.string_input_producer()
- 17. Was bedeutet "Argument", das "nicht logisch" ist, in FactoMineR MCA?
- 18. Was ist eine "zirkuläre Argument Referenz" Fehler, mit activesupport time_zone?
- 19. Matplotlib: Was ist die Funktion von cmap in imshow?
- 20. Was ist die Syntax Bedeutung von RAISERROR()
- 21. Was ist die Bedeutung von! #: 3?
- 22. Was ist die Verwendung von Assert.Equals?
- 23. Was ist die Genauigkeit von scheduleAtFixedRate?
- 24. Was ist die Bedeutung von // in bash?
- 25. Was ist die Verwendung von Keyword final?
- 26. Was ist die Verwendung von mehreren Hauptmethoden?
- 27. Was ist die Arbeit von unten Code?
- 28. Was ist die Bedeutung von minHessian (Surffeaturedetector)
- 29. Was ist die Nummer von Pythons Zip (*)?
- 30. Was ist die ordnungsgemäße Verwendung von EnsureChildControls()?