2016-03-28 2 views
0

Was ich will, ist nur ein Ioloop in einem Thread ausführen, und schreiben Sie eine Nachricht an nsqd. Hier ist ein Versuch:Wie implementiert man einen NSQ Writer, der Nachrichten aus einer Warteschlange holen und sie schieben kann?

#!/usr/bin/env python2 
# coding=utf-8 

import tornado 
import time 
from nsq.writer import Writer 

w = Writer(["bj1:4150", "bj2:4150"], reconnect_interval=15) 
w.connect() 


@tornado.gen.coroutine 
def future_pub(topic, msg): 
    result = w.pub(topic, msg) 
    print(result) 
    time.sleep(3) 
    raise tornado.gen.Return(result) 


@tornado.gen.coroutine 
def main(): 
    while True: 
     try: 
      future = future_pub("test", "message") 
      yield future 
     except Exception as e: 
      print(e.message) 


tornado.ioloop.IOLoop.instance().run_sync(main) 

Aber es hat nicht funktioniert. Kannst du mir helfen? Vielen Dank!

Antwort

0

Sie haben nie nsq.run() ausgeführt, sodass keine Verbindungen geöffnet sind und Ihre Writer keine Nachrichten veröffentlichen kann.
Siehe das Beispiel in der Dokumentation: https://pynsq.readthedocs.org/en/latest/writer.html, das PeriodicCallback zum Senden einer Nachricht einmal pro Sekunde verwendet.

+0

Ich habe bereits gelesen, dass doc. Aber es kann mein Problem nicht lösen. In der Tat möchte ich eine Sache: der Schreiber kann Nachricht aus einer Warteschlange abrufen und warten, wenn keine weitere Nachricht in der Warteschlange, aber nicht 1 Sekunde schlafen. Kannst du mir helfen? –

+0

Der Writer ruft keine Nachrichten aus der Warteschlange ab, sondern schreibt sie * in * eine Warteschlange. Möchten Sie einen Warteschlangenleser, der jede gelesene Nachricht dann zu einem anderen Thema veröffentlicht? Aus Ihrer ursprünglichen Frage geht nicht klar hervor, was Sie erreichen möchten. – Oliver

+0

Ja, das ist was ich will. Könnten Sie mir helfen, eine Demo zu implementieren? Danke vielmals! –

Verwandte Themen