Dieser Artikel stellt hauptsächlich die Methoden und Parameterkommentare zum Betrieb von Beanstalkd in PHP vor. Er hat einen gewissen Referenzwert. Jetzt kann ich ihn mit allen teilen, die ihn benötigen.
PostRank wurde später als Open-Source-Lösung veröffentlicht und wird heute in großem Umfang bereitgestellt und genutzt, wobei täglich Millionen von Aufgaben verarbeitet werden. Beanstalkd ist ein typisches Memcached-ähnliches Design. Das Protokoll und die Verwendung sind gleich, sodass Benutzer, die Memcached verwendet haben, das Gefühl haben, dass Beanstalkd vertraut ist.
Typischer Lebenszyklus eines Jobs
put reserve delete -----> [READY] ---------> [RESERVED] --------> *poof*
Mögliche Statusmigration des Jobs
put with delay release with delay ----------------> [DELAYED] <------------. | | kick | (time passes) | | | put v reserve | delete -----------------> [READY] ---------> [RESERVED] --------> *poof* ^ ^ | | | \ release | | | `-------------' | | | | kick | | | | bury | [BURIED] <---------------' | | delete `--------> *poof*
Drittanbieterbibliothek, die zum Betrieb verwendet wird Beanstalkd
, die Installation wird übersprungen, ggf. siehe ReferenzPHP
<?php require __DIR__ . '/vendor/autoload.php'; use Pheanstalk\Pheanstalk; /** * 实例化beanstalk * 参数依次为:ip地址 端口号默认11300 连接超时时间 是否长连接 */ $pheanstalk = new Pheanstalk('127.0.0.1', 11300, 3, false); ?>
Beanstalkd-Status
$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 ) )
Aktuelle Pipeline-Liste
$listTubes = $pheanstalk->listTubes();
Pipeline-Details anzeigen
$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 ) )
Aufgabendetails anzeigen
$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 //释放预留任务次数 ) )
Aufgabendetails anzeigen ( via ID)
$job = $pheanstalk->peek(1); $job_stats = $pheanstalk->statsJob($job);
Geben Sie die zu verwendende Pipe an
$tube = $pheanstalk->useTube('default');
Daten in die Pipe einfügen
$tube = $pheanstalk->useTube('default'); $put = $tube->put( 'hello, beanstalk', // 任务内容 1024, // 任务的优先级 10, // 不等待直接放到ready队列中 60 // 处理任务的时间 );
$pheanstalk->putInTube('default', 'test1', 1024, 10, 60);
Anhören das Rohr
$tube = $pheanstalk->watch('user');
Rohre entfernen, die nicht überwacht werden müssen
$tube = $pheanstalk->watch('user')->ignore('default');
Hören Sie zu zu verstopften Leitungen
$job = $pheanstalk->watch('user')->reserve(4); //堵塞时间为4秒
Alle überwachten Leitungen auflisten
$pheanstalk->listTubesWatched();
watch + Methode reservieren
$pheanstalk->reserveFromTube('default')
Aktuelle Aufgabe löschen
$job = $pheanstalk->watch('default')->reserve(); $pheanstalk->delete($job);
Aktuelle Aufgabe wieder einfügen die Pipeline
$job = $pheanstalk->watch('default')->reserve(); $pheanstalk->release($job);
Erneuern Sie die Lebensdauer der Aufgabe (wenn die Zeit zur Verarbeitung der Aufgabe kürzer ist als die aktuelle Ausführungszeit der Aufgabe)
$job = $pheanstalk->watch('default')->reserve(); $pheanstalk->touch($job); //TODO
Reservieren Sie die Aufgabe
$job = $pheanstalk->watch('default')->reserve(); $pheanstalk->bury($job);
Geben Sie die reservierte Aufgabe frei (Ändern Sie den Reday-Status)
$job = $pheanstalk->peekBuried('default'); $pheanstalk->kickJob($job);
Reservierte Aufgaben stapelweise freigeben
$pheanstalk->userTube('default')->kick(999); //将id小于999的预留任务全部释放
Die aktuell bereitstehenden Aufgaben lesen (bereit)
$job = $pheanstalk->peekReady('default');
Die aktuell verzögerte Aufgabe lesen (verzögert)
$job = $pheanstalk->peekDelayed('default');
Verzögerung für die Pipeline festlegen
$pheanstalk->pauseTube('default', 100); //设置100秒延迟
Verzögerung in der Pipeline aufheben
$pheanstalk->resumeTube('default');
Die von PHP implementierte Intranet-Penetrationsanwendung Spike wurde rekonstruiert
php ruft Phantomjs zu WeChat Mini auf Programmfreigabe
Das obige ist der detaillierte Inhalt vonMethoden und Parameterkommentare zum Betrieb von Beanstalkd in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!