2016-07-01 20 views
1

Ich möchte einen Verbraucher mit einer SelectConnection schreiben.Verzögerung Nachricht Verbrauch mit SelectConnection

Wir haben mehrere Geräte in unserer Netzwerkinfrastruktur, die Verbindungen nach einer bestimmten Zeit schließen, daher möchte ich die Heartbeat-Funktionalität verwenden.

Soweit ich weiß, läuft der IOLoop auf dem Haupt-Thread, so dass Heartbeat-Frames nicht verarbeitet werden können, während dieser Thread die Nachricht verarbeitet.

Meine Idee ist es, mehrere Worker-Threads zu erstellen, die die Nachrichten verarbeiten, damit der Haupt-Thread den IOLoop verarbeiten kann. Die Verarbeitung einer Nachricht erfordert eine Menge Ressourcen, sodass nur eine bestimmte Anzahl der Nachrichten gleichzeitig verarbeitet werden sollte. Anstatt die verbleibenden Nachrichten auf der Clientseite zu speichern, möchte ich sie in der Warteschlange belassen.

Gibt es eine Möglichkeit, den Nachrichtenkonsum zu unterbrechen, ohne den Herzschlag zu unterbrechen?

Antwort

0

Ich bin kein Experte für SelectConnection für Pika, aber Sie könnten dies implementieren, indem Sie Consumer Prefetch (QoS) auf die gewünschte Anzahl von Prozessen setzen.

Dies würde bedeuten, dass sobald eine Nachricht eingeht, Sie sie in einen Prozess oder einen Thread entladen. Sobald die Nachricht verarbeitet wurde, bestätigen Sie, dass die Nachricht verarbeitet wurde.

Als ein Beispiel, wenn Sie die QoS auf 10 festlegen. Der Client würde höchstens 10 Nachrichten ziehen und keine neuen Nachrichten ziehen, bis mindestens einer von ihnen bestätigt wurde.

Der wichtige Teil hier ist, dass Sie Nachrichten nur bestätigen müssen, sobald Sie mit der Verarbeitung fertig sind.