Heim > Artikel > PHP-Framework > In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.
Dieser Artikel bringt Ihnen relevantes Wissen über thinkphp, das hauptsächlich die damit verbundenen Probleme der Verwendung von think-queue zur Implementierung der Redis-Nachrichtenwarteschlange organisiert. Ich hoffe, es wird für alle hilfreich sein.
Empfohlene Studie: „PHP-Video-Tutorial“
Message Queue Middleware ist eine wichtige Komponente in großen Systemen und hat sich nach und nach zum zentralen Mittel der internen Kommunikation in Unternehmenssystemen entwickelt. Es verfügt über eine Reihe von Funktionen wie lose Kopplung, asynchrone Nachrichtenübermittlung, Reduzierung von Verkehrsspitzen, zuverlässige Zustellung, Broadcast, Flusskontrolle und eventuelle Konsistenz und ist zu einem der Hauptmittel des asynchronen RPC geworden.
Die Nachrichtenwarteschlange hat zwei Rollen und einen Container. Die Rollen sind Produzent (verantwortlich für die Veröffentlichung von Aufgaben) und Verbraucher (verantwortlich für die Ausführung von Aufgaben). Der Container wird zum Speichern/Sammeln der vom Produzenten veröffentlichten Aufgaben verwendet die beiden Schritte Veröffentlichung und Ausführung, ohne sich gegenseitig zu beeinflussen.
Die vom Produzenten freigegebenen Aufgaben werden in der Nachrichtenwarteschlange gespeichert/akkumuliert, und die Verbraucher ergreifen die Initiative, um die Aufgaben aus der Nachrichtenwarteschlange zu entnehmen und sie auszuführen First werden zuerst ausgeführt (Warteschlange: First In, First Out). Ohne einen Verbraucher stapeln sich Aufgaben in der Warteschlange und warten darauf, zur Ausführung herausgenommen zu werden.
Die Nachrichtenwarteschlange eignet sich für Schnittstellen von Drittanbietern mit großer Parallelität oder langer Verarbeitungszeit und erfordert Batch-Vorgänge. Sie kann zum Senden von SMS, E-Mail, APP-Push usw. verwendet werden, ist aber nicht darauf beschränkt -System, das heißt, die von diesem System veröffentlichten Nachrichten können Aufgaben für sich selbst oder für andere Systeme ausführen. Auf die gleiche Weise kann das System auch als Verbraucher fungieren, um von ihm oder anderen Systemen veröffentlichte Nachrichtenwarteschlangenaufgaben auszuführen.
Grundlegende Konfiguration der Nachrichtenwarteschlange. Erstellen Sie die Konfigurationsdatei queue.php im zusätzlichen Verzeichnis Es wird hier platziert, weil Queue Standardmäßig liest der Quellcode die Warteschlangendatei von extra, um Konfigurationsinformationen zu erhalten. Wenn Sie die Konfigurationsdatei an anderer Stelle platzieren möchten, müssen Sie die Standarderfassungskonfiguration im Quellcode entsprechend ändern , wie in der Abbildung unten gezeigt
Erstellt vom Produzenten Eine Testklasse, schreiben Sie die Produzentenmethode<?phpreturn [ 'connector' => 'Redis', 'expire' => null, // 任务过期时间,默认为60秒,若要禁用,则设置为 null 'default' => 'REDIS_QUEUE', // 默认的队列名 'host' => '127.0.0.1', // redis 主机ip 'port' => 6379, // redis 端口 'password' => '', // redis 密码 'select' => 0, // 使用哪里一个 db,默认为 db0 'timeout' => 0, // redis 连接的超时时间 'persistent' => false, // 是否是长连接];Consumer
Erstellen Sie eine TestQueue-Klasse, die als Verbraucher verwendet wird, um Aufgaben in der Nachrichtenwarteschlange auszuführen
<?phpnamespace app\api\controller;use think\Controller;use think\Queue;class Test extends Controller{ // 生产者,添加消息队列 public function addQueue() { // 参数 $data = [ 'id' => rand(0, 99), 'userName' => '一起摸鱼' ]; // 消息队列名 $queueName = 'testQueue'; // 推入消息队列,注意这里的 ::class 是PHP5.5才有的写法 $isPushed = Queue::push(TestQueue::class, $data, $queueName); // PHP5.5以下的可以直接写命名空间 // $isPushed = Queue::push('app\common\queue\TestQueue', $data, $queueName); if ($isPushed !== false) { // 成功之后的业务 echo '队列加入成功'; } else { // 失败之后的业务 echo '队列加入失败'; } }}
Anforderungsschnittstelle, der Produzent veröffentlicht Aufgaben
Der nächste Schritt besteht darin, den Abhörmodus der Warteschlange zu aktivieren, da es nicht möglich ist, die Warteschlange manuell auszuführen jedes Mal, wenn eine Aufgabe hinzugefügt wird. Es gibt zwei Abhörmodi für die Warteschlange. Die Konfigurationsparameter lauten wie folgt:
Wird im Projektstammverzeichnis ausgeführt
php think queue:work --queue Warteschlangenname
Starten Sie den Verbraucher und führen Sie die Aufgabe aus
redis in der Warteschlange Die Aufgabe wird auch nach der Ausführung gelöscht
Allerdings müssen wir aufgrund der Notwendigkeit auch die Ausführung des Consumer-Daemon-Prozesses anhalten, um sicherzustellen, dass die Warteschlange nach dem Schließen noch gestartet werden kann Terminal.
nohup php think queue:listen --queue Warteschlangenname&
PS: Geben Sie „exit“ in der Shell ein, um das Terminal zu verlassenPS: Geben Sie „exit“ in der Shell ein, um das Terminal zu verlassen
... Der Prozess, der Nohup entspricht, muss benachrichtigt werden, dass er zusammen heruntergefahren werden muss. Zu diesem Zeitpunkt ist der gesamte Nachrichtenwarteschlangenprozess beendet.
Empfohlenes Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonIn diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!