Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk melaksanakan peruntukan tugas teragih dan penjadualan dalam perkhidmatan mikro PHP

Bagaimana untuk melaksanakan peruntukan tugas teragih dan penjadualan dalam perkhidmatan mikro PHP

WBOY
WBOYasal
2023-09-24 12:37:02757semak imbas

Bagaimana untuk melaksanakan peruntukan tugas teragih dan penjadualan dalam perkhidmatan mikro PHP

Cara melaksanakan peruntukan dan penjadualan tugas teragih dalam perkhidmatan mikro PHP
Peruntukan dan penjadualan tugas teragih ialah keperluan biasa apabila membina aplikasi berskala besar. Sebagai bahasa pembangunan web yang biasa digunakan, PHP juga boleh digunakan untuk membina seni bina perkhidmatan mikro dan melaksanakan peruntukan dan penjadualan tugas teragih. Artikel ini akan memperkenalkan cara melaksanakan peruntukan tugas dan penjadualan teragih dalam perkhidmatan mikro PHP dan menyediakan contoh kod khusus.

1. Peruntukan tugas teragih
Dalam pengagihan tugasan teragih, terdapat penerbit tugasan yang menerbitkan tugasan ke baris gilir tugas, dan kemudian pengguna berbilang tugas memproses tugasan ini. Dalam PHP, baris gilir boleh digunakan untuk melaksanakan pengagihan tugas. Perkhidmatan baris gilir yang biasa digunakan termasuk RabbitMQ dan Redis.

  1. Gunakan RabbitMQ untuk melaksanakan baris gilir tugasan
    RabbitMQ ialah perisian tengah mesej yang berkuasa yang boleh melaksanakan fungsi baris gilir tugas. Mula-mula, pasang RabbitMQ dan mulakan perkhidmatan. Kemudian, gunakan perpustakaan klien RabbitMQ dalam kod PHP untuk menerbitkan tugasan dan menerima tugasan.

Terbitkan contoh kod tugas:

<?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();
?>

Terima contoh kod tugas:

<?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. Gunakan Redis untuk melaksanakan baris gilir tugas
    Redis juga merupakan perkhidmatan baris gilir yang biasa digunakan. Selepas memasang dan memulakan perkhidmatan Redis, anda boleh menggunakan sambungan Redis PHP untuk melaksanakan penerbitan dan penerimaan tugas.

Terbitkan contoh kod tugas:

<?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
";
?>

Terima contoh kod tugas:

<?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
";
}
?>

Contoh kod di atas boleh menerbitkan tugasan ke baris gilir, dan kemudian memproses tugasan ini oleh berbilang pengguna. Bilangan pengguna boleh ditambah mengikut keperluan sebenar untuk mencapai pemprosesan tugas teragih.

2. Penjadualan Tugas Teragih
Penjadualan tugas teragih bermakna dalam sistem teragih, tugasan diberikan kepada nod yang sesuai untuk dilaksanakan mengikut peraturan tugasan yang khusus. Dalam PHP, anda boleh menggunakan penjadual tugas untuk melaksanakan penjadualan tugas teragih. Penjadual tugas yang biasa digunakan termasuk penjadual tugas Laravel dan Cron.

  1. Menggunakan penjadual tugas Laravel
    Laravel ialah rangka kerja PHP popular yang menyediakan keupayaan penjadualan tugas yang hebat. Mula-mula, pasang dan konfigurasikan projek Laravel. Kemudian, tentukan tugas dalam penjadual tugas Laravel dan nyatakan kekerapan pelaksanaan dan arahan pelaksanaan tugas itu. . Penjadualan tugas boleh dicapai dengan menetapkan masa pelaksanaan tugas dalam ungkapan Cron. Dalam PHP, anda boleh menggunakan skrip shell untuk melaksanakan tugas PHP.

Tulis fail skrip:

<?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()
    {
        // 处理任务的代码
    }
}

Tetapkan ungkapan Cron:

<?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');
    }
}
    Contoh kod di atas boleh melaksanakan tugas dengan kerap dan menetapkan tugasan kepada nod yang sepadan untuk pelaksanaan berdasarkan masa pelaksanaan tugas.

  1. Ringkasnya, dengan menggunakan perkhidmatan baris gilir dan penjadual tugas dalam perkhidmatan mikro PHP, pengagihan tugasan dan penjadualan boleh dicapai. Pembangun boleh memilih perkhidmatan baris gilir dan penjadual tugas yang sesuai berdasarkan keperluan sebenar, dan mengkonfigurasi serta membangunkan berdasarkan kod sampel. Melalui pengagihan tugasan dan penjadualan, keupayaan pemprosesan serentak sistem dan kecekapan pelaksanaan tugas boleh dipertingkatkan.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan peruntukan tugas teragih dan penjadualan dalam perkhidmatan mikro PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn