Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tutorial pembangunan baris gilir mesej PHP: Melaksanakan penjadual tugas berjadual teragih

Tutorial pembangunan baris gilir mesej PHP: Melaksanakan penjadual tugas berjadual teragih

WBOY
WBOYasal
2023-09-11 18:07:451517semak imbas

Tutorial pembangunan baris gilir mesej PHP: Melaksanakan penjadual tugas berjadual teragih

Tutorial Pembangunan Barisan Mesej PHP: Melaksanakan Penjadual Tugasan Masa Teragih

Pengenalan:

Dengan perkembangan pesat aplikasi rangkaian, banyak pembangun sering menghadapi beberapa operasi yang memakan masa semasa membangunkan aplikasi yang kompleks, seperti menghantar e-mel laporan, dsb. Operasi ini biasanya menduduki sejumlah besar sumber pelayan, menyebabkan sistem bertindak balas dengan perlahan, atau malah menyebabkan ralat akibat tamat masa. Untuk menyelesaikan masalah ini, pembangun mula mencari cara untuk mengendalikan operasi yang memakan masa ini secara tidak segerak, dan baris gilir mesej menjadi penyelesaian yang sangat berkesan. Artikel ini akan memperkenalkan cara menggunakan baris gilir mesej PHP untuk melaksanakan penjadual tugas berjadual teragih.

Jadual kandungan:

  1. Apakah baris gilir mesej
  2. Gunakan baris gilir mesej untuk melaksanakan penjadual tugas berjadual yang diedarkan
    2.1 Tentukan baris gilir tugasan
    2.2.2.2 tasks

    Contoh demonstrasi kod
  3. Kesimpulan
  4. Apakah itu baris gilir mesej
  5. Baris gilir mesej ialah kaedah penghantaran mesej antara berbilang sistem Ia menyimpan mesej dalam baris gilir dalam susunan pertama masuk dahulu (FIFO). dan boleh menggunakan mesej daripada baris gilir secara serentak melalui berbilang pengguna. Penggunaan baris gilir mesej bukan sahaja dapat mencapai pemprosesan tak segerak, tetapi juga menyelesaikan masalah pertukaran data antara sistem yang berbeza.

Gunakan baris gilir mesej untuk melaksanakan penjadual tugas berjadual teragih
  1. 2.1 Tentukan baris gilir tugas

Pertama, kita perlu menentukan baris gilir tugas untuk menyimpan tugasan yang dijadualkan. Barisan gilir ini boleh menjadi perkhidmatan baris gilir mesej, seperti RabbitMQ atau Kafka, atau perkhidmatan caching, seperti Redis. Pilih baris gilir tugas yang sesuai berdasarkan keperluan sebenar.

2.2. Pengeluar dan pengguna

Dalam baris gilir mesej, pengeluar tugasan bertanggungjawab untuk menambah tugasan yang dijadualkan pada baris gilir tugas, manakala pengguna tugasan bertanggungjawab untuk mendapatkan tugas daripada baris gilir tugas dan melaksanakannya. Dalam persekitaran yang diedarkan, pengeluar dan pengguna boleh diedarkan pada mesin yang berbeza dan menyelaraskan penjadualan tugas melalui baris gilir mesej.

2.3. Tetapkan tugas berjadual

Apabila menambah tugas, pengeluar perlu menetapkan masa pelaksanaan tugas. Masa ini boleh menjadi masa mutlak atau masa relatif. Pengeluar menambah maklumat tugas (seperti ID tugas, masa pelaksanaan, skrip pelaksanaan, dll.) pada baris gilir tugas dan menetapkan masa pelaksanaan.

2.4. Memakan tugas

Apabila pengguna mendapat tugas, ia perlu menentukan sama ada masa pelaksanaan tugas telah tiba. Jika masa pelaksanaan tugas telah tiba, pengguna boleh melaksanakan tugas secara langsung jika tidak, pengguna boleh menunggu untuk tempoh masa dan cuba mendapatkan tugas itu semula. Apabila pengguna melaksanakan tugas, mereka perlu memberi perhatian kepada pengendalian pengecualian untuk memastikan kebolehpercayaan tugas.

Contoh demonstrasi kod
  1. Seterusnya, kami menggunakan kod contoh mudah untuk menunjukkan cara menggunakan baris gilir mesej PHP untuk melaksanakan penjadual tugas berjadual teragih.
<?php

// 配置消息队列服务
$config = [
   'host' => '127.0.0.1',
   'port' => 5672,
   'user' => 'guest',
   'pass' => 'guest',
   'vhost' => '/'
];

// 连接消息队列服务
$connection = new AMQPStreamConnection($config['host'], $config['port'], $config['user'], $config['pass'], $config['vhost']);
$channel = $connection->channel();

// 声明任务队列
$channel->queue_declare('task_queue', false, true, false, false);

// 设置任务
$taskData = [
   'id' => uniqid(),
   'execution_time' => time() + 3600, // 执行时间延迟一小时
   'payload' => 'Hello, World!'
];

// 发送任务
$message = new AMQPMessage(json_encode($taskData), ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);
$channel->basic_publish($message, '', 'task_queue');

// 关闭连接
$channel->close();
$connection->close();
?>

Kod pengguna adalah seperti berikut:

<?php

// 连接消息队列服务
$connection = new AMQPStreamConnection($config['host'], $config['port'], $config['user'], $config['pass'], $config['vhost']);
$channel = $connection->channel();

// 声明任务队列
$channel->queue_declare('task_queue', false, true, false, false);

// 注册任务处理器
$callback = function ($message) {
   $taskData = json_decode($message->body, true);

   // 判断任务执行时间是否到达
   if (time() >= $taskData['execution_time']) {
      // 执行任务
      echo "Task ID: {$taskData['id']}
";
      echo "Task Payload: {$taskData['payload']}
";
      // TODO: 执行具体的脚本
   } else {
      // 重新放回队列
      $message->nack(false, true);
   }
};

// 开始消费任务
$channel->basic_qos(null, 1, null);
$channel->basic_consume('task_queue', '', false, false, false, false, $callback);

// 循环处理任务
while (count($channel->callbacks)) {
   $channel->wait();
}

// 关闭连接
$channel->close();
$connection->close();
?>

Kesimpulan
  1. Dengan menggunakan baris gilir mesej PHP, kami boleh melaksanakan penjadual tugas berjadual yang diedarkan, yang boleh menyelesaikan dengan berkesan kesan operasi yang memakan masa ke atas prestasi sistem. Dalam projek sebenar, kita boleh memilih perkhidmatan baris gilir mesej yang sesuai mengikut keperluan khusus, dan mengembangkan fungsi baris gilir tugas mengikut kerumitan tugas.

Tutorial ini hanyalah contoh mudah. ​​Terdapat banyak butiran yang perlu dipertimbangkan dalam aplikasi sebenar, seperti keutamaan tugas, mekanisme kegagalan mencuba semula tugas, dsb. Saya berharap dengan mempelajari tutorial ini, saya boleh mempunyai pemahaman awal tentang pembangunan baris gilir mesej PHP dan dapat mengaplikasikannya dalam projek sebenar.

Atas ialah kandungan terperinci Tutorial pembangunan baris gilir mesej PHP: Melaksanakan penjadual tugas berjadual teragih. 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