Question

Qui doit gérer la persistance dans le ZeroMQ?

Lorsque nous utilisons les clients ZeroMQ en langage Python, quels sont les plug-ins / modules disponibles pour gérer la persistance?

Je voudrais connaître les motifs d'utiliser le ZeroMQ.

Était-ce utile?

La solution

Pour autant que je sache, ZeroMQ n'a pas de persistance. Il est hors de portée pour elle et doit être manipulé par l'utilisateur final. Tout comme sérialisation le message. En C #, je l'ai utilisé db4o d'ajouter la persistance. En général, je persiste l'objet à l'état brut, sérialisation alors et l'envoyer à la prise ZMQ. BTW, ce fut pour la paire PUB / SUB.

Autres conseils

Sur les extrémités de l'application, vous pouvez persister en conséquence, par exemple, je l'ai construit une couche de persistence dans Node.js qui communiquait aux appels php back-end et via websockets.

L'aspect persistence tenu des messages pendant une certaine période de temps (http://en.wikipedia.org/wiki/Time_to_live) c'était de donner aux clients la possibilité de se connecter. Je en mémoire des structures de données, mais je caressais l'idée d'utiliser Redis pour gagner persistence sur disque.

Nous avions besoin pour conserver les messages reçus d'un abonné avant de les traiter. Les messages sont reçus dans un fil séparé et stocké sur le disque, tandis que la file d'attente de message persistant est manipulé dans le fil principal.

Le module est disponible à l'adresse: https://pypi.org/project/persizmq . De la documentation:

import pathlib

import zmq

import persizmq

context = zmq.Context()
subscriber = context.socket(zmq.SUB)
subscriber.setsockopt_string(zmq.SUBSCRIBE, "")
subscriber.connect("ipc:///some-queue.zeromq")

persistent_dir = pathlib.Path("/some/dir")
storage = persizmq.PersistentStorage(persistent_dir=persistent_dir)

def on_exception(exception: Exception)->None:
    print("an exception in the listening thread: {}".format(exception))

with persizmq.ThreadedSubscriber(
    callback=storage.add_message, subscriber=subscriber, 
    on_exception=on_exception):

    msg = storage.front()  # non-blocking
    if msg is not None:
        print("Received a persistent message: {}".format(msg))
        storage.pop_front()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top