Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie die verteilte Aufgabenzuweisung und -planung in PHP-Microservices

So implementieren Sie die verteilte Aufgabenzuweisung und -planung in PHP-Microservices

WBOY
WBOYOriginal
2023-09-24 12:37:02700Durchsuche

So implementieren Sie die verteilte Aufgabenzuweisung und -planung in PHP-Microservices

So implementieren Sie die verteilte Aufgabenzuweisung und -planung in PHP-Microservices
Die verteilte Aufgabenzuweisung und -planung ist eine häufige Anforderung beim Erstellen umfangreicher Anwendungen. Als häufig verwendete Webentwicklungssprache kann PHP auch zum Aufbau einer Microservice-Architektur und zur Implementierung der verteilten Aufgabenzuweisung und -planung verwendet werden. In diesem Artikel wird die Implementierung der verteilten Aufgabenzuweisung und -planung in PHP-Mikrodiensten vorgestellt und spezifische Codebeispiele bereitgestellt.

1. Verteilte Aufgabenzuweisung
Bei der verteilten Aufgabenzuweisung gibt es einen Aufgabenherausgeber, der Aufgaben in der Aufgabenwarteschlange veröffentlicht, und dann verarbeiten mehrere Aufgabenkonsumenten diese Aufgaben. In PHP können Warteschlangen zur Implementierung der Aufgabenverteilung verwendet werden. Zu den häufig verwendeten Warteschlangendiensten gehören RabbitMQ und Redis.

  1. Verwenden Sie RabbitMQ, um die Aufgabenwarteschlange zu implementieren.
    RabbitMQ ist eine leistungsstarke Nachrichten-Middleware, die Aufgabenwarteschlangenfunktionen implementieren kann. Installieren Sie zunächst RabbitMQ und starten Sie den Dienst. Verwenden Sie dann die Client-Bibliothek von RabbitMQ im PHP-Code, um Aufgaben zu veröffentlichen und Aufgaben zu empfangen.

Beispiel für einen Aufgabencode veröffentlichen:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('task_queue', false, true, false, false);

$data = implode(' ', array_slice($argv, 1));
if (empty($data)) {
    $data = "Hello World!";
}

$msg = new AMQPMessage($data, ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);

$channel->basic_publish($msg, '', 'task_queue');

echo " [x] Sent $data
";

$channel->close();
$connection->close();
?>

Beispiel für einen Aufgabencode empfangen:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use PhpAmqpLibConnectionAMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('task_queue', false, true, false, false);

echo " [*] Waiting for messages. To exit, press CTRL+C
";

$callback = function ($msg) {
    echo ' [x] Received ', $msg->body, "
";
    sleep(substr_count($msg->body, '.'));

    echo " [x] Done
";
    $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};

$channel->basic_qos(null, 1, null);
$channel->basic_consume('task_queue', '', false, false, false, false, $callback);

while ($channel->is_consuming()) {
    $channel->wait();
}

$channel->close();
$connection->close();
?>
  1. Verwenden Sie Redis, um die Aufgabenwarteschlange zu implementieren.
    Redis ist auch ein häufig verwendeter Warteschlangendienst. Nach der Installation und dem Starten des Redis-Dienstes können Sie die Redis-Erweiterung von PHP verwenden, um die Veröffentlichung und den Empfang von Aufgaben zu implementieren.

Beispiel für einen Aufgabencode veröffentlichen:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$data = implode(' ', array_slice($argv, 1));
if (empty($data)) {
    $data = "Hello World!";
}

$redis->lPush('task_queue', $data);

echo " [x] Sent $data
";
?>

Beispiel für einen Aufgabencode empfangen:

<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

echo " [*] Waiting for messages. To exit, press CTRL+C
";

while (true) {
    $data = $redis->brPop('task_queue', 0);

    echo ' [x] Received ', $data[1], "
";
    sleep(substr_count($data[1], '.'));

    echo " [x] Done
";
}
?>

Das obige Codebeispiel kann Aufgaben in der Warteschlange veröffentlichen und diese Aufgaben dann von mehreren Verbrauchern verarbeiten. Die Anzahl der Verbraucher kann je nach tatsächlichem Bedarf erhöht werden, um eine verteilte Aufgabenverarbeitung zu erreichen.

2. Verteilte Aufgabenplanung
Verteilte Aufgabenplanung bedeutet, dass in einem verteilten System Aufgaben den entsprechenden Knoten zur Ausführung gemäß den spezifischen Regeln der Aufgabe zugewiesen werden. In PHP können Sie den Taskplaner verwenden, um eine verteilte Aufgabenplanung zu implementieren. Zu den häufig verwendeten Aufgabenplanern gehören der Aufgabenplaner von Laravel und Cron.

  1. Verwenden des Aufgabenplaners von Laravel
    Laravel ist ein beliebtes PHP-Framework, das leistungsstarke Aufgabenplanungsfunktionen bietet. Installieren und konfigurieren Sie zunächst das Laravel-Projekt. Definieren Sie dann die Aufgabe im Aufgabenplaner von Laravel und geben Sie die Ausführungshäufigkeit und den Ausführungsbefehl der Aufgabe an.

Definition eines Aufgabencodebeispiels:

<?php

namespace AppConsoleCommands;

use IlluminateConsoleCommand;

class ProcessTask extends Command
{
    protected $signature = 'task:process';
    protected $description = 'Process tasks';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        // 处理任务的代码
    }
}

Legen Sie die Ausführungshäufigkeit der Aufgabe im Aufgabenplaner fest:

<?php

namespace AppConsole;

use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    protected $commands = [
        CommandsProcessTask::class,
    ];

    protected function schedule(Schedule $schedule)
    {
        $schedule->command('task:process')->everyMinute();
    }

    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}
  1. Verwenden Sie Cron, um die Aufgabenplanung zu implementieren.
    Cron ist ein Unix-ähnliches Betriebssystem-Tool zum regelmäßigen Ausführen von Aufgaben. Die Aufgabenplanung kann durch Festlegen der Ausführungszeit der Aufgabe in einem Cron-Ausdruck erreicht werden. In PHP können Sie Shell-Skripte verwenden, um PHP-Aufgaben auszuführen.

Schreiben Sie die Skriptdatei:

#!/bin/bash

php /path/to/task.php

Legen Sie den Cron-Ausdruck fest:

* * * * * /path/to/script.sh

Das obige Codebeispiel kann Aufgaben regelmäßig ausführen und die Aufgaben basierend auf der Aufgabenausführungszeit den entsprechenden Knoten zur Ausführung zuweisen.

Zusammenfassend lässt sich sagen, dass durch die Verwendung von Warteschlangendiensten und Aufgabenplanern in PHP-Mikrodiensten eine verteilte Aufgabenzuweisung und -planung erreicht werden kann. Entwickler können den geeigneten Warteschlangendienst und Aufgabenplaner basierend auf den tatsächlichen Anforderungen auswählen und basierend auf dem Beispielcode konfigurieren und entwickeln. Durch verteilte Aufgabenzuweisung und -planung können die gleichzeitigen Verarbeitungsfähigkeiten und die Effizienz der Aufgabenausführung des Systems verbessert werden.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die verteilte Aufgabenzuweisung und -planung in PHP-Microservices. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn