Heim  >  Artikel  >  PHP-Framework  >  In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.

In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.

WBOY
WBOYnach vorne
2022-06-28 15:33:143934Durchsuche

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.

In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.

Empfohlene Studie: „PHP-Video-Tutorial

Kurze Einführung:

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.

Umgangssprachlich:

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.

Der allgemeine Prozess der Nachrichtenwarteschlange ist:

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.

Vorteile:

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.


Im Folgenden wird hauptsächlich die Verwendung von Think-Queue vorgestellt. Die Warteschlange von ThinkPHP verfügt über vier integrierte Treiber: Redis, Database, Topthink und Sync werden hier verwendet. Redis wird auch für Think-Queue-Nachrichten empfohlen Kann Aufgabenfreigabe, Erfassung, Ausführung, Löschung, erneute Freigabe, verzögerte Freigabe, Zeitüberschreitungskontrolle und andere Vorgänge verarbeiten.

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  [
    &#39;connector&#39;  => '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

In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.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 = [
            &#39;id&#39; => 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 '队列加入失败';
        }
    }}

Laufergebnisse

Anforderungsschnittstelle, der Produzent veröffentlicht Aufgaben

Die Redis-Warteschlange speichert Aufgaben

In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.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 In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.

php think queue:work --queue Warteschlangenname

In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.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. In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.

nohup php think queue:listen --queue Warteschlangenname&

In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.

PS: Geben Sie „exit“ in der Shell ein, um das Terminal zu verlassen

In diesem Artikel erfahren Sie, wie Sie die Redis-Nachrichtenwarteschlange mithilfe von ThinkPHP und Think-Queue implementieren.

PS: 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen