2012-04-12 12 views

Antwort

2

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.

1

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.

Verwandte Themen