Cet article présente principalement les méthodes et les commentaires sur les paramètres concernant le fonctionnement de Beanstalkd en PHP. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
Beanstalk est un système de file d'attente de mémoire distribuée léger et hautes performances. Il a été conçu à l'origine pour réduire l'accès aux pages des systèmes d'applications Web à volume élevé en exécutant de manière asynchrone des tâches fastidieuses dans le système. arrière-plan Delay, a soutenu l’application Facebook Causes avec 9,5 millions d’utilisateurs.
Plus tard open source, PostRank est désormais déployé et utilisé à grande échelle, traitant des millions de tâches chaque jour. Beanstalkd est une conception typique de type Memcached. Le protocole et l'utilisation sont les mêmes, donc les utilisateurs qui ont utilisé Memcached auront l'impression que Beanstalkd semble familier.
cycle de vie typique du travail
put reserve delete -----> [READY] ---------> [RESERVED] --------> *poof*
travail possible Migration d'état
put with delay release with delay ----------------> [DELAYED] <------------. | | kick | (time passes) | | | put v reserve | delete -----------------> [READY] ---------> [RESERVED] --------> *poof* ^ ^ | | | \ release | | | `-------------' | | | | kick | | | | bury | [BURIED] <---------------' | | delete `--------> *poof*
Ignorez l'installation, si nécessaire, veuillez vous référer à la référence
Remarque : Composer doit être installé, tutoriel link Composer Méthode d'installation
est utilisée pour faire fonctionner la bibliothèque tierce Beanstalkd
de <🎜 L'installation est ignorée. Si nécessaire, veuillez vous référer à la référence <🎜. >PHP
Opération Pheanstalk
<?php require __DIR__ . '/vendor/autoload.php'; use Pheanstalk\Pheanstalk; /** * 实例化beanstalk * 参数依次为:ip地址 端口号默认11300 连接超时时间 是否长连接 */ $pheanstalk = new Pheanstalk('127.0.0.1', 11300, 3, false); ?>
Statut de Beanstalkd
Retour :$stats = $pheanstalk->stats();
Pheanstalk\Response\ArrayResponse Object ( [_name:Pheanstalk\Response\ArrayResponse:private] => OK [storage:ArrayObject:private] => Array ( [current-jobs-urgent] => 0 //当前存在优先级的任务数 [current-jobs-ready] => 0 //当前准备就绪的任务数 [current-jobs-reserved] => 0 //当前处于阻塞的任务数 [current-jobs-delayed] => 0 //当前处于延迟状态的任务数 [current-jobs-buried] => 0 //当前预留的任务数 [cmd-put] => 0 //cmd命令为累计运行次数 [cmd-peek] => 0 [cmd-peek-ready] => 0 [cmd-peek-delayed] => 0 [cmd-peek-buried] => 0 [cmd-reserve] => 0 [cmd-reserve-with-timeout] => 0 [cmd-delete] => 0 [cmd-release] => 0 [cmd-use] => 0 [cmd-watch] => 0 [cmd-ignore] => 0 [cmd-bury] => 0 [cmd-kick] => 0 [cmd-touch] => 0 [cmd-stats] => 1 [cmd-stats-job] => 0 [cmd-stats-tube] => 0 [cmd-list-tubes] => 3 [cmd-list-tube-used] => 0 [cmd-list-tubes-watched] => 0 [cmd-pause-tube] => 0 [job-timeouts] => 0 //超时的任务 [total-jobs] => 0 //任务总数 [max-job-size] => 65535 //任务字符串大小 [current-tubes] => 1 //当前的管道数 [current-connections] => 1 //当前打开的连接数 [current-producers] => 0 //当前生产者数量 [current-workers] => 0 //当前消费者数量 [current-waiting] => 0 //发出reserved指令,但没有响应的数量 [total-connections] => 4 //累计链接数量 [pid] => 530 //Beanstalkd进程id [version] => 1.10 [rusage-utime] => 0.003545 [rusage-stime] => 0.007473 [uptime] => 105855 //运行时间(秒) [binlog-oldest-index] => 0 [binlog-current-index] => 0 [binlog-records-migrated] => 0 [binlog-records-written] => 0 [binlog-max-size] => 10485760 [id] => 4199e3eca8bfdea8 [hostname] => lmmlwendeMacBook-Air.local ) )
Liste actuelle du pipeline
$listTubes = $pheanstalk->listTubes();
Afficher les détails du pipeline
Retour :$stats = $pheanstalk->statsTube();
Pheanstalk\Response\ArrayResponse Object ( [_name:Pheanstalk\Response\ArrayResponse:private] => OK [storage:ArrayObject:private] => Array ( [name] => default //当前管道名 [current-jobs-urgent] => 0 //当前管道存在优先级的任务数 [current-jobs-ready] => 0 //当前管道准备就绪的任务书 [current-jobs-reserved] => 0 //当前管道处于阻塞的任务数 [current-jobs-delayed] => 0 //当前管道处于延迟状态的任务数 [current-jobs-buried] => 0 //当前管道预留的任务数 [total-jobs] => 0 //当前管道总任务数 [current-using] => 1 //当前管道生产者数量 [current-watching] => 1 //当前管道消费者数量 [current-waiting] => 0 //发出reserved指令,但没有响应的数量 [cmd-delete] => 0 [cmd-pause-tube] => 0 [pause] => 0 [pause-time-left] => 0 ) )
Afficher les détails de la tâche
Retour :$job = $pheanstalk->watch('default')->reserve(); $job_stats = $pheanstalk->statsJob($job);
Pheanstalk\Response\ArrayResponse Object ( [_name:Pheanstalk\Response\ArrayResponse:private] => OK [storage:ArrayObject:private] => Array ( [id] => 1 //任务job ID [tube] => test //所处管道 [state] => reserved //当前状态 [pri] => 1024 //任务优先级(默认1024) [age] => 469 //任务存活时间(秒) [delay] => 0 //任务延迟时间(秒) [ttr] => 60 //任务执行时间 [time-left] => 59 //任务在reserve状态维持的秒数 [file] => 0 // binlog-4 默认-0 [reserves] => 2 //总共reserve次数 [timeouts] => 0 //任务超时次数 [releases] => 0 //重设任务次数 [buries] => 0 //预留次数 [kicks] => 0 //释放预留任务次数 ) )
Afficher les détails de la tâche (par ID)
Méthodes de production Beanstalkd$job = $pheanstalk->peek(1); $job_stats = $pheanstalk->statsJob($job);
Spécifiez le tuyau à utiliser
$tube = $pheanstalk->useTube('default');
Insérez les données dans le tuyau
Ou :$tube = $pheanstalk->useTube('default'); $put = $tube->put( 'hello, beanstalk', // 任务内容 1024, // 任务的优先级 10, // 不等待直接放到ready队列中 60 // 处理任务的时间 );
$pheanstalk->putInTube('default', 'test1', 1024, 10, 60);
Tuyau d'écoute
$tube = $pheanstalk->watch('user');
Suppression ne pas Tuyaux qui doivent être surveillés
$tube = $pheanstalk->watch('user')->ignore('default');
Surveiller le tuyau de manière bloquée
$job = $pheanstalk->watch('user')->reserve(4); //堵塞时间为4秒
Liste de toutes les canalisations surveillées
$pheanstalk->listTubesWatched();
méthode surveillance + réserve
$pheanstalk->reserveFromTube('default')
Supprimer la tâche en cours
$job = $pheanstalk->watch('default')->reserve(); $pheanstalk->delete($job);
Remettre la tâche en cours dans le pipeline
$job = $pheanstalk->watch('default')->reserve(); $pheanstalk->release($job);
Renouveller la vie de la tâche (lorsque le temps de traitement de la tâche est inférieur au temps d'exécution actuel de la tâche)
$job = $pheanstalk->watch('default')->reserve(); $pheanstalk->touch($job); //TODO
Réserver la tâche
$job = $pheanstalk->watch('default')->reserve(); $pheanstalk->bury($job);
Libérer les tâches réservées (passage au statut redday)
$job = $pheanstalk->peekBuried('default'); $pheanstalk->kickJob($job);
Libérer les tâches réservées par lots
$pheanstalk->userTube('default')->kick(999); //将id小于999的预留任务全部释放
Lire les tâches actuellement prêtes (prêt)
$job = $pheanstalk->peekReady('default');
Lire la tâche actuellement retardée (retardée)
$job = $pheanstalk->peekDelayed('default');
Définir un délai sur le pipeline
$pheanstalk->pauseTube('default', 100); //设置100秒延迟
Annuler le retard sur le pipeline
Ce qui précède est l'intégralité du contenu de cet article, J'espère que cela sera utile à l'apprentissage de tout le monde. Pour obtenir de l'aide, veuillez faire attention au site Web PHP chinois pour plus de contenu connexe !$pheanstalk->resumeTube('default');
Recommandations associées :
L'application de pénétration intranet Spike implémentée par PHP a été reconstruite php appelle phantomjs vers WeChat Mini Partage de programmeCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!