15 Stimmen

Wie kann ich die Anzahl der in der Warteschlange stehenden Aufträge eines bestimmten Typs in gearman ermitteln?

Ich habe eine Reihe von Gearman-Kunden, die mir einen Auftrag schicken, z. B. Auftrag1.

$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');

Es dauert etwa 10 Sekunden, diesen Auftrag zu bearbeiten. Ich möchte feststellen, wie viele "job1"-Aufträge zu einem bestimmten Zeitpunkt darauf warten, von einem Arbeiter bearbeitet zu werden. Wie kann ich das tun?

1voto

Charles Punkte 49941

Es sieht nicht so aus, als gäbe es unmittelbare Möglichkeiten, diese Informationen zu erhalten.

Hier sind einige Möglichkeiten. Erstens, wenn Sie bei der Erstellung von Aufträgen Handles verwenden können (Suche nach "Speaking of checking the status"), können Sie sie an einem zentralen Ort speichern und von jedem Client aus abfragen.

Zweitens können Sie Ihren Gearman-Server so einstellen, dass er Dauerhafte Warteschlangen und führen Sie dann selbst eine Abfrage in der Warteschlange durch. Dies könnte die einfachere und sauberere der beiden Optionen sein.

1voto

James Butler Punkte 3834

Gearmand verfügt über eine Telnet-Schnittstelle, die Sie abfragen können. (Die genauen Details des Protokolls finden Sie auf der Gearmand-Website - http://gearman.org/?id=protocol )

Ich habe diesen Code hier als Ausgangspunkt für meine eigene Entwicklung verwendet. https://github.com/liorbk/php/blob/master/GearmanTelnet.php (dieser Code ist an sich völlig in Ordnung und Sie sollten in der Lage sein, ihn sofort zu verwenden)

Es ist eine unschöne Lösung, aber bis jemand die Verwaltungsschnittstelle von gearman so verbessert, dass man direkt über PHP kommunizieren kann oder ein Plugin dafür schreibt, ist man auf sich allein gestellt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X