simple job queue
1.1.0
Мне нужна была simple job queue , которую можно было бы использовать в базе данных, а также при необходимости использовать с другими адаптерами, такими как beanstalkd/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 );
}
}
Supervisord станет вашим джемом. Посмотрите множество статей о том, как это реализовать.
PHPUnit на данный момент тестирует примеры sqlite3.
vendor/bin/phpunit