Search by

libriciel / cakephp-beanstalk

ludeusepommateaumreyrollepviver

Permet d'utiliser beanstalk pour lancer des background processes.

Package info

gitlab.adullact.net/Libriciel/archivage/cakephp-beanstalk.git

Type:cakephp-plugin

pkg:composer/libriciel/cakephp-beanstalk

Statistics

Installs: 6 311

Dependents: 1

Suggesters: 0

4.1.1 2023-10-05 14:21 UTC

README

License build status coverage report

Plugin CakePHP 4 de file de jobs : émission de jobs, serveur de notification et workers, avec suivi des jobs et des workers en base de données.

Dépendance de

ProjetBuildCoverage
asalaebuild statuscoverage report
versaebuild statuscoverage report
asalae-corebuild statuscoverage report

Dépendances

ProjetBuildCoverage
cakephp-state-machinebuild statuscoverage report

Prérequis

  • PHP ^7.4 || ^8.1 avec les extensions intl, json, pcntl, pdo, sockets, zmq (paquet php-zmq)
  • Base de données pour les tables beanstalk_jobs et beanstalk_workers (SQL PostgreSQL fourni, ou migrations du plugin)
  • Le serveur de file d'attente est fourni par le plugin (bin/cake beanstalk_server) : pas de démon beanstalkd à installer

Installation

composer require libriciel/cakephp-beanstalk:dev-master

Dans Application::bootstrap() :

$this->addPlugin('Beanstalk');

Tables beanstalk_jobs et beanstalk_workers : SQL PostgreSQL fourni dans config/schema/beanstalk.sql, ou migrations du plugin :

bin/cake migrations migrate --plugin Beanstalk

Configuration (clé Beanstalk) :

  • client_host, client_port : adresse du serveur, utilisée pour émettre les jobs
  • server_host, server_port : écoute du serveur (beanstalk_server)
  • workers : workers lancés et surveillés par le serveur (classname, run, kill, quantity, active)
  • table_jobs, table_workers : tables utilisées (par défaut Beanstalk.BeanstalkJobs et Beanstalk.BeanstalkWorkers)

config/app_default.php (asalae)

        'client_host' => 'localhost',
        'client_port' => 11300,
        'server_host' => '0.0.0.0',
        'server_port' => 11300,
        // ...
        'workers' => [
            'analyse' => [
                'classname' => \Asalae\Worker\AnalyseWorker::class,
                'run' => 'bin/cake worker analyse',
                'kill' => 'kill {{pid}}',
                'quantity' => 1,
                'active' => true,
            ],

Utilisation

Les jobs sont enregistrés en base de données ; le serveur beanstalk_server (remplace le service beanstalkd) notifie les workers et lance ceux définis dans la configuration.

Command

  • beanstalk_server [--datasource] [--log] : serveur de jobs
  • beanstalk_client : envoie un message de test au serveur
  • worker <nom> : lance un worker (--tube, --one-job, --unique, --keep-alive, --log-file…)
  • job list, job view, job edit, job pause, job resume, job resume_all, job delete, job delete_all, job check : gestion des jobs

docker-compose.yml (asalae)

    command: php /var/www/asalae/bin/cake.php beanstalk_server --log /var/www/asalae/logs/beanstalk.log

Utility

Beanstalk\Utility\Beanstalk : émission de jobs sur un tube (setTube(), emit(), emitMany()).

src/Model/Table/MailsTable.php (asalae)

            $Beanstalk = Utility::get('Beanstalk');
            $Beanstalk->setTube('mail');
            $Beanstalk->emit(
                ['mail_id' => $entity->id, 'user_id' => $user_id],
                PheanstalkInterface::DEFAULT_PRIORITY,
                $this->getConnection()->inTransaction() ? 10
                    : PheanstalkInterface::DEFAULT_DELAY
            );

Worker

Un worker implémente Beanstalk\Command\WorkerInterface (work(), beforeWork(), afterWork()…) ; Beanstalk\Command\AbstractWorker fournit la boucle de traitement des jobs. Beanstalk\Worker\TestWorker sert aux tests de bon fonctionnement.

src/Worker/AnalyseWorker.php (asalae)

class AnalyseWorker extends AbstractAsalaeWorkerV4 implements WorkerInterface
{
    const TUBE = 'analyse';
    // ...
    public function work($data)
    {
        $this->out(__("Analyse du transfert {0}", $data['transfer_id']));

Model

Tables BeanstalkJobs (jobs, état, erreurs) et BeanstalkWorkers (workers lancés).

Tests

vendor/bin/phpunit