Ich habe einen AMQP-Server ( RabbitMQ ), den ich gerne veröffentlichen und in einem Tornado Webserver . Um dies zu tun, dachte ich, ich würde eine asynchrone amqp Python-Bibliothek verwenden; insbesondere Pika (eine Variante, die angeblich Tornado unterstützt).
Ich habe Code geschrieben, der erfolgreich aus der Warteschlange zu lesen scheint, außer dass ich am Ende der Anfrage eine Ausnahme erhalte (der Browser gibt eine gute Antwort zurück):
%Vor%Ich bin mir nicht ganz sicher, ob ich diese Bibliothek richtig verwende, also könnte ich etwas ganz offensichtlich falsch machen. Der grundlegende Ablauf meines Codes ist:
Meine Fragen sind ein paar:
Ich werde versuchen, ein wenig später einen Beispielcode zu bekommen, aber die oben beschriebenen Schritte legen die verbrauchende Seite der Dinge ziemlich vollständig dar. Ich habe auch Probleme mit der Veröffentlichungsseite, aber der Verbrauch von Warteschlangen ist dringender.
Es würde helfen, Quellcode zu sehen, aber ich benutze das gleiche tornadounterstützende Pika-Modul ohne Probleme in mehr als einem Produktionsprojekt.
Sie möchten keine Verbindung pro Anfrage erstellen. Erstellen Sie eine Klasse, die alle Ihre AMQP-Vorgänge umschließt und sie als Singleton auf der Tornado-Anwendungsebene instanziiert, die für Anforderungen (und für Anforderungshandler) verwendet werden kann. Ich mache das in einer 'runapp ()' Funktion, die sowas macht und dann den Haupttornado ioloop startet.
Hier ist eine Klasse namens 'Events'. Es ist eine teilweise Implementierung (genauer gesagt, ich definiere 'self.handle_event' hier nicht. Das liegt an dir.
%Vor%Und dann habe ich das in eine Datei namens 'events.py' eingefügt. Meine RequestHandler und alle Backend-Codes verwenden ein "common.py" -Modul, das Code umschließt, der für beide nützlich ist (meine RequestHandler rufen keine amqp-Modulmethoden direkt auf - auch für db, Cache usw.), also ich define 'events = None' auf der Modulebene in common.py, und ich instanziiere das Event-Objekt so:
%Vor%Frohes neues Jahr :-D
Jemand hat Erfolg beim Zusammenführen von Tornado und Pika hier gemeldet. Soweit ich das beurteilen kann, ist es nicht so einfach, Pika von Tornado anzurufen, da beide Bibliotheken ihre eigenen Event Loops haben wollen.
Tags und Links python asynchronous rabbitmq amqp tornado