2016-06-17 20 views
0

Ich habe einen Anwendungsfall, in dem ich die letzte Leerlaufzeit (letzte Nachricht verarbeitete Zeit) eines Pika-Verbrauchers (pika.BlockingConnection) bekommen möchte.
Anwendungsfall:
Wenn die letzte bearbeitete Zeit größer als die Schwellenzeit ist (Beispiel: 1 Stunde). Ich möchte, dass der Verbraucher angeregt wird oder eine Rückrufmethode hat, um zu entscheiden, was ich tun soll? Wie das Senden einer Benachrichtigung an einen Benutzer.Stoppen Sie channel.basic_consume, wenn die Verbindung im Leerlauf ist/nicht lange konsumieren

Gibt es eine Möglichkeit, dies zu tun?

Antwort

0

pika unterstützt ein timeout callback.

Sie diesen Rückruf am Ende jeder Nachricht Empfang hinzufügen könnte, um den Bezug zu halten und es zu Beginn jeder Nachricht Empfang zu entfernen.

def close_connec(): 
    # close here 

timer_id = None 

def on_message(chan, method, props, body): 
    if timer_id is not None: 
     chan.connection.remove_timeout(timer_id) 
    # process message 
    timer_id = chan.connection.add_timeout(3600, close_connec) 
+0

Danke für die Antwort. Ich habe versucht, mit diesem Code und es funktioniert gut für mich.aber nur, wenn ich den Timeout-Callback nur zum Beenden/Schließen der Verbindung verwenden möchte. Was, wenn ich eine Benachrichtigung senden und den Verbrauch wieder aufnehmen möchte? Ich bekomme ein seltsames Problem, wenn ich versuche, fortzufahren. Die Benachrichtigung wurde gedruckt die Anzahl der Nachrichten, die es verbraucht hat. Hier ist der Referenzcode: (https://gist.github.com/rohitvernekar/a79faded6261feaca82e4ac6b0292be0) –

+0

Sieht aus wie Die Timeout-Callback-Funktion wurde nicht ordnungsgemäß entfernt. Sie können dies tun? @ Kevin-M-Granger –

+0

Ich verstehe die Frage nicht. –