Artikel ini membawa anda pengetahuan yang berkaitan tentang thinkphp, yang terutamanya memperkenalkan kandungan yang berkaitan tentang penggunaan think-queue untuk melaksanakan baris gilir biasa dan gilir tertunda disediakan secara rasmi oleh thinkphp Perkhidmatan baris gilir mesej, mari kita lihat, semoga bermanfaat untuk semua.

Disyorkan pembelajaran: "Tutorial Video PHP"
###TP6 Queue
TP6 Think-queue boleh digunakan untuk melaksanakan baris gilir biasa dan baris gilir tertunda.
think-queue ialah perkhidmatan baris gilir mesej yang disediakan secara rasmi oleh thinkphp Ia menyokong beberapa ciri asas baris gilir mesej:
- Penerbitan mesej, pemerolehan, pelaksanaan, pemadaman, penghantaran semula, Pengendalian kegagalan. , pelaksanaan tertunda, kawalan tamat masa, dsb.
- Baris gilir berbilang, had memori, mula, henti, jaga, dsb.
- Baris gilir mesej boleh diturunkan taraf kepada pelaksanaan segerak
Proses pelaksanaan baris gilir mesej
1 Tolak mesej ke perkhidmatan baris gilir mesej melalui pengeluar
2 redis queue (zset)
3 Pengguna memantau baris gilir apabila ia mendengar mesej baharu dalam baris gilir, ia mendapat yang pertama dalam baris gilir
4 memanggil kelas perniagaan untuk diproses. 🎜>
fail konfigurasi
Selepas memasang think-queue, queue.php akan dijana dalam direktori konfigurasi.
TP6 menyediakan pelbagai kaedah pelaksanaan baris gilir mesej Secara lalai, penyegerakan digunakan di sini.
1 | composer require topthink/think-queue
|
Salin selepas log masuk
Buat direktori dan fail penggunaan baris gilir
Buat direktori baris gilir dalam direktori aplikasi, dan kemudian buat fail Queue.php kelas abstrak baharu dalam sebagai kelas asas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | return [
'default' => 'redis' ,
'connections' => [
'sync' => [
'type' => 'sync' ,
],
'database' => [
'type' => 'database' ,
'queue' => 'default' ,
'table' => 'jobs' ,
'connection' => null,
],
'redis' => [
'type' => 'redis' ,
'queue' => 'default' ,
'host' => env( 'redis.host' , '127.0.0.1' ),
'port' => env( 'redis.port' , '6379' ),
'password' => env( 'redis.password' , '123456' ),
'select' => 0,
'timeout' => 0,
'persistent' => false,
],
],
'failed' => [
'type' => 'none' ,
'table' => 'failed_jobs' ,
],
];
|
Salin selepas log masuk
semua kelas pengguna sebenar mewarisi kelas abstrak asas
logik pengeluar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | <?phpnamespace app\queue; use think\facade\Cache; use think\queue\Job; use think\facade\Log;
abstract class Queue{
public function fire(Job $job , $data )
{
if ( empty ( $data )) {
Log::error(sprintf('[%s][%s] 队列无消息', __CLASS__ , __FUNCTION__ ));
return ;
}
$jobId = $job ->getJobId();
if (! $this ->checkJob( $jobId , $data )) {
$job -> delete ();
Cache::store( 'redis' )-> delete ( $jobId );
return ;
}
if ( $this ->execute( $data )) {
Log::record(sprintf( '[%s][%s] 队列执行成功' , __CLASS__ , __FUNCTION__ ));
$job -> delete ();
Cache::store( 'redis' )-> delete ( $jobId );
} else {
if ( $job ->attempts() > 3) {
Log::error(sprintf( '[%s][%s] 队列执行重试次数超过3次,执行失败' , __CLASS__ , __FUNCTION__ ));
$job -> delete ();
Cache::store( 'redis' )-> delete ( $jobId );
}
}
}
protected function checkJob(string $jobId , $message ): bool
{
$data = Cache::store( 'redis' )->get( $jobId );
if (! empty ( $data )) {
return false;
}
Cache::store( 'redis' )->set( $jobId , $message );
return true;
}
abstract protected function execute( $data ): bool;}
|
Salin selepas log masuk
Dayakan tugas pemantauan proses dan laksanakan
1 2 3 4 5 | <?phpnamespace app\queue\test; use app\queue\Queue; class Test extends Queue{
protected function execute( $data ): bool
{
}}
|
Salin selepas log masuk
Pengenalan mod arahan
1 2 3 4 5 6 7 8 9 10 11 | use think\facade\Queue;
Queue::push( $job , $data , $queueName );
Queue::push(Test:: class , $data , $queueName );
Queue::later( $delay , $job , $data , $queueName );
Queue::later(10 , Test:: class , $data , $queueName );
|
Salin selepas log masuk
Mod arahan
baris:perintah kerja
1 2 | php think queue:listen
php think queue:work
|
Salin selepas log masuk
arahan kerja: Perintah ini akan memulakan proses kerja untuk memproses baris gilir mesej.
Mod dengar
-
Anda boleh melihat bahawa dalam mod dengar, parameter
tidak disertakan Sebabnya akan diterangkan di bawah1 2 3 4 5 6 7 8 | php think queue:work \
--daemon
--queue helloJobQueue
--delay 0 \
--force \
--memory 128 \
--sleep 3 \
--tries 2
|
Salin selepas log masuk
-
Mula, berhenti dan mulakan semula. baris gilir mesej
1 2 3 4 5 6 7 | php think queue:listen \
--queue helloJobQueue \
--delay 0 \
--memory 128 \
--sleep 3 \
--tries 0 \
--timeout 60
|
Salin selepas log masuk
--deamon
Mulakan baris gilir mesej:
-
Hentikan semua baris gilir mesej:
-
Mulakan Semula Semua baris gilir mesej:
-
- Pembelajaran yang disyorkan: "
Tutorial Video PHP
"1 2 | php think queue:restart
php think queue:work
|
Salin selepas log masuk
Atas ialah kandungan terperinci Mari kita bincangkan tentang thinkphp6 menggunakan think-queue untuk melaksanakan baris gilir biasa dan baris gilir tertunda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!