Pergunta

Quem tem que gerenciar os persistentes no Zeromq?

Quando usamos os clientes ZerOMQ na linguagem Python, quais são os plug-ins/módulos disponíveis para gerenciar o persistente?

Eu gostaria de saber os padrões para usar o Zeromq.

Foi útil?

Solução

Até onde eu sei, Zeromq não tem nenhuma persistência. Está fora de escopo e precisa ser tratado pelo usuário final. Assim como serializar a mensagem. Em C#, usei o DB4O para adicionar persistência. Normalmente, persisto o objeto em seu estado bruto, depois serialize -o e o envio para o soquete ZMQ. BTW, isso foi para pub/sub par.

Outras dicas

No termine do aplicativo, você pode persistir de acordo, por exemplo, construí uma camada de persistência no Node.js que se comunicava para fazer chamadas de PHP de back-end e através do WebSockets.

O aspecto de persistência realizou mensagens por um certo período de tempo (http://en.wikipedia.org/wiki/time_to_live), isso era para dar aos clientes a chance de se conectar. Usei estruturas de dados na memória, mas brinquei com a idéia de usar o Redis para obter persistência no disco.

Precisávamos persistir as mensagens recebidas de um assinante antes de processá -las. As mensagens são recebidas em um encadeamento separado e armazenadas no disco, enquanto a fila de mensagens persistida é manipulada no encadeamento principal.

O módulo está disponível em: https://pypi.org/project/persizmq. Da documentação:

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()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top