simple job queue
1.1.0
ฉันต้องการ/ต้องการ simple job queue ที่สามารถใช้กับฐานข้อมูลได้ แต่ยังใช้กับอะแดปเตอร์อื่นๆ เช่น beantalkd/redis/etc หากจำเป็น ไม่เห็นตัวเลือกที่ดีสำหรับคิวงานแบบสแตนด์อโลนสำหรับฐานข้อมูล
composer require n0nag0n/simple-job-queue
<?php
use n0nag0n Job_Queue
// default is mysql based job queue
$ Job_Queue = new Job_Queue ( ' mysql ' , [
' mysql ' => [
' table_name ' => ' new_table_name ' , // default is job_queue_jobs
' use_compression ' => false // default is true to use COMPRESS() and UNCOMPRESS() for payload
]
]);
$ PDO = new PDO ( ' mysql:dbname=testdb;host=127.0.0.1 ' , ' user ' , ' pass ' );
$ Job_Queue -> addQueueConnection ( $ PDO );
$ Job_Queue -> selectPipeline ( ' send_important_emails ' );
$ Job_Queue -> addJob ( json_encode ([ ' something ' => ' that ' , ' ends ' => ' up ' , ' a ' => ' string ' ]));
<?php
use n0nag0n Job_Queue
// default is mysql based job queue
$ Job_Queue = new Job_Queue ( ' pgsql ' , [
' pgsql ' => [
' table_name ' => ' new_table_name ' , // default is job_queue_jobs
]
]);
$ PDO = new PDO ( ' pgsql:dbname=testdb;host=127.0.0.1 ' , ' user ' , ' pass ' );
$ Job_Queue -> addQueueConnection ( $ PDO );
$ Job_Queue -> selectPipeline ( ' send_important_emails ' );
$ Job_Queue -> addJob ( json_encode ([ ' something ' => ' that ' , ' ends ' => ' up ' , ' a ' => ' string ' ]));
<?php
use n0nag0n Job_Queue
// default is mysql based job queue
$ Job_Queue = new Job_Queue ( ' sqlite ' , [
' sqlite ' => [
' table_name ' => ' new_table_name ' // default is job_queue_jobs
]
]);
$ PDO = new PDO ( ' sqlite:example.db ' );
$ Job_Queue -> addQueueConnection ( $ PDO );
$ Job_Queue -> selectPipeline ( ' send_important_emails ' );
$ Job_Queue -> addJob ( json_encode ([ ' something ' => ' that ' , ' ends ' => ' up ' , ' a ' => ' string ' ]));
<?php
use n0nag0n Job_Queue
// default is mysql based job queue
$ Job_Queue = new Job_Queue ( ' beanstalkd ' );
$ pheanstalk = Pheanstalk Pheanstalk:: create ( ' 127.0.0.1 ' );
$ Job_Queue -> addQueueConnection ( $ pheanstalk );
$ Job_Queue -> selectPipeline ( ' send_important_emails ' );
$ Job_Queue -> addJob ( json_encode ([ ' something ' => ' that ' , ' ends ' => ' up ' , ' a ' => ' string ' ]));
ดู example_worker.php
สำหรับไฟล์หรือดูด้านล่าง:
<?php
$ Job_Queue = new n0nag0n Job_Queue ( ' mysql ' );
$ PDO = new PDO ( ' mysql:dbname=testdb;host=127.0.0.1 ' , ' user ' , ' pass ' );
$ Job_Queue -> addQueueConnection ( $ PDO );
$ Job_Queue -> watchPipeline ( ' send_important_emails ' );
while ( true ) {
$ job = $ Job_Queue -> getNextJobAndReserve ();
// adjust to whatever makes you sleep better at night (for database queues only, beanstalkd does not need this if statement)
if ( empty ( $ job )) {
usleep ( 500000 );
continue ;
}
echo " Processing { $ job [ ' id ' ]}n" ;
$ payload = json_decode ( $ job [ ' payload ' ], true );
try {
$ result = doSomethingThatDoesSomething ( $ payload );
if ( $ result === true ) {
$ Job_Queue -> deleteJob ( $ job );
} else {
// this takes it out of the ready queue and puts it in another queue that can be picked up and "kicked" later.
$ Job_Queue -> buryJob ( $ job );
}
} catch ( Exception $ e ) {
$ Job_Queue -> buryJob ( $ job );
}
}
หัวหน้างานจะเป็นคนแยมของคุณ ค้นหาบทความมากมายเกี่ยวกับวิธีดำเนินการนี้
การทดสอบ PHPUnit พร้อมตัวอย่าง sqlite3 ในขณะนี้
vendor/bin/phpunit