simple job queue
1.1.0
데이터베이스에서 사용할 수 있을 뿐만 아니라 필요한 경우 beanstalkd/redis/etc와 같은 다른 어댑터와도 사용할 수 있는 simple job queue 필요했습니다. 데이터베이스의 독립형 작업 대기열에 대한 좋은 옵션을 실제로 보지 못했습니다.
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 );
}
}
Supervisord가 여러분의 잼이 될 것입니다. 이를 구현하는 방법에 대한 수많은 기사를 찾아보세요.
당분간은 sqlite3 예제를 사용하여 PHPUnit 테스트를 진행합니다.
vendor/bin/phpunit