Vorwort
Bitte stellen Sie vor der Analyse sicher, dass Sie die Implementierung der Nachrichtenwarteschlange verstehen.
Die Nachrichtenwarteschlange von tp5 basiert auf der Datenbank Redis und der offiziellen Topthink-Implementierung von tp.
Dieses Kapitel basiert auf Redis für Analyse
Speicherschlüssel:
Schlüssel | Typ | Beschreibung |
---|---|---|
queues:queueName queues:queueName
|
list | 要执行的任务 |
think:queue:restart |
string | 重启队列时间戳 |
queues:queueName:delayed |
zSet | 延迟任务 |
queues:queueName:reserved |
zSet | 执行失败,等待重新执行 |
执行命令
work和listen的区别在下面会解释
命令 | 描述 |
---|---|
php think queue:work |
监听队列 |
php think queue:listen |
监听队列 |
php think queue:restart |
重启队列 |
php think queue:subscribe |
暂无,可能是保留的 官方有什么其他想法但是还没实现 |
行为标签
标签 | 描述 |
---|---|
worker_daemon_start |
守护进程开启 |
worker_memory_exceeded |
内存超出 |
worker_queue_restart |
重启守护进程 |
worker_before_process |
任务开始执行之前 |
worker_before_sleep |
任务延迟执行 |
queue_failed |
任务执行失败 |
命令参数
参数 | 默认值 | 可以使用的模式 | 描述 |
---|---|---|---|
queue |
null | work,listen | 要执行的任务名称 |
daemon |
null | work | 以守护进程执行任务 |
delay |
0 | work,listen | 失败后重新执行的时间 |
force |
null | work | 失败后重新执行的时间 |
memory |
128M | work,listen | 限制最大内存 |
sleep |
3 | work,listen | 没有任务的时候等待的时间 |
tries | listAuszuführende Aufgaben |
queues:queueName:delayed
🎜🎜zSet🎜🎜Verzögerte Aufgaben🎜🎜🎜🎜queues:queueName : reserviert
🎜🎜zSet🎜🎜Ausführung fehlgeschlagen, wartet auf erneute Ausführung🎜🎜🎜🎜🎜Befehl ausführen🎜Der Unterschied zwischen Arbeit und Zuhören wird unten erklärt🎜🎜🎜🎜Befehl🎜 🎜Beschreibung🎜🎜 🎜🎜🎜🎜
php think queue:work
🎜🎜Listen queue🎜🎜🎜🎜php think queue:listen
🎜🎜Listen queue🎜🎜🎜🎜php think queue :restart
🎜🎜Starten Sie die Warteschlange neu🎜🎜🎜🎜php think queue:subscribe
🎜🎜Nein, es kann sein, dass der Beamte andere Ideen hat, aber das war nicht der Fall noch implementiert🎜🎜🎜🎜🎜 Tag 🎜🎜🎜🎜🎜 Tag 🎜🎜 Beschreibung 🎜🎜🎜🎜🎜🎜worker_daemon_start
🎜🎜Daemon startet. 🎜🎜🎜🎜worker_memory_exceeded🎜🎜 Speicher überschritten 🎜🎜🎜🎜worker_queue_restart🎜🎜Daemon neu starten🎜🎜🎜🎜worker_before_process
🎜🎜Bevor die Aufgabe ausgeführt wird🎜🎜🎜🎜worker_before_sleep Code>🎜 🎜Verzögerte Aufgabenausführung🎜🎜🎜 🎜<code>queue_failed
🎜🎜Aufgabenausführung fehlgeschlagen🎜🎜🎜🎜🎜Befehlsparameter🎜🎜🎜🎜🎜Parameter🎜🎜Standardwert🎜🎜Modi, die verwendet werden können 🎜🎜Beschreibung🎜🎜 🎜🎜 🎜🎜queue
🎜🎜null🎜🎜work,listen🎜🎜Der Name der auszuführenden Aufgabe🎜🎜🎜🎜daemon
🎜🎜null🎜🎜work🎜🎜 Führen Sie die Aufgabe als Daemon-Prozess aus null >🎜🎜3🎜🎜arbeiten, zuhören🎜🎜Warten, wenn keine Aufgaben vorhanden sind. Zeit🎜🎜🎜🎜versuche
🎜🎜0🎜🎜arbeiten, zuhören🎜🎜Maximale Anzahl von Versuchen nach fehlgeschlagener Aufgabe🎜🎜🎜 🎜Modusunterschiede
1: Unterschiedliche Ausführungsprinzipien
Arbeit: Einzelprozess-Verarbeitungsmodus;
Kein Daemon-Parameter Der Arbeitsprozess beendet den aktuellen Prozess direkt nach der Verarbeitung der nächsten Nachricht. Wenn keine neuen Nachrichten vorhanden sind, wird es für einen bestimmten Zeitraum in den Ruhezustand versetzt und dann beendet.
Mit dem Daemon-Parameter verarbeitet der Arbeitsprozess die Nachrichten in der Warteschlange in einer Schleife, bis der Speicher die Parameterkonfiguration überschreitet, bevor der Prozess beendet wird. Wenn keine neue Nachricht vorhanden ist, wird in jeder Schleife eine Zeit lang geschlafen.
Listen: Verarbeitungsmodus des übergeordneten Prozesses + untergeordneter Prozess in der Warteschlange wird durch den Arbeitsunterprozess verarbeitet. Wenn der Arbeitsunterprozess beendet wird, hört der übergeordnete Prozess, in dem sich
befindet, auf das Ausgangssignal des Unterprozesses und erstellt einen neuen Arbeitsunterprozess mit Einzelausführung. Prozess. ;
Entwickler können wählen um die Ausnahme abzufangen und die Ausführung des übergeordneten Prozesses fortzusetzen;
02: Der übergeordnete Prozess weist aus irgendeinem Grund einen Speicherverlust auf, wenn der vom übergeordneten Prozess belegte Speicher die Parameterkonfiguration --memory überschreitet und untergeordnete Prozesse werden beendet. Unter normalen Umständen ist der vom Abhörprozess selbst belegte Speicher stabil.
Arbeit: Es wird eine Schleife innerhalb des Skripts ausgeführt und das Framework-Skript wird in der frühen Phase der Befehlsausführung geladen.
Die Leistung des Arbeitsmodus ist also höher als die des Hörmodus.
Arbeit: Im Wesentlichen kann es weder die Laufzeit des Prozesses selbst steuern noch die Ausführungszeit der ausgeführten Aufgaben begrenzen.
listen: Kann die Zeitüberschreitungszeit des von ihm erstellten Arbeitsunterprozesses begrenzen;
can Die maximale Zeit, die der Arbeitsunterprozess ausführen darf, ist durch den Timeout-Parameter begrenzt. Unterprozesse, die nicht nach diesem Zeitlimit beendet wurden, werden zwangsweise beendet. Der Unterschied zwischen
expire und time
5: Verschiedene Nutzungsszenarien
Anwendbare Arbeitsszenarien sind:
01: Große Anzahl von Aufgaben
03: Kurz Ausführungszeit von Aufgaben
04: Es gibt keine Endlosschleife in der Verbraucherklasse, Sleep(), Exit(), Die() und anderen Logiken, die leicht zu Fehlern führen können.
Listen anwendbare Szenarien sind:
01: Die Zahl Anzahl der Aufgaben ist klein
02: Die Ausführungszeit der Aufgabe ist lang
Öffentlicher Betrieb
Da wir Analysen auf Basis von Redis durchführen, müssen wir nur src analysieren /queue/connector/redis.php
01: Rufen Sie zuerst die magische Methode in <code>src/Queue.php
auf. __callStatic
buildConnector
wird aufgerufen in der __callStatic-Methode03: Die Konfigurationsdatei wird zuerst in buildConnector geladen. Wenn keine vorhanden ist, wird sie synchron ausgeführt
04: Erstellen Sie eine Verbindung basierend auf der Konfigurationsdatei und übergeben Sie sie in Konfiguration04: Verbindungsobjekt erstellensrc/Queue.php
中的魔术方法__callStatic
02: 在__callStatic方法中调用了buildConnector
Operationen im Konstruktor von die Klasse redis.php:
01: Erkennen, ob die Redis-Erweiterung installiert ist
02: Konfiguration zusammenführen
03: Erkennen, ob es sich um eine Redis-Erweiterung oder pRedis handelt
Veröffentlichungsprozess
Parameter veröffentlichen
Parametername
Verwendbare Methoden | $job | ||
---|---|---|---|
Push, später | $ Daten | leer | |
push,später | $Warteschlange | Standard | |
push,später | $Verzögerung | null | |
später |