>백엔드 개발 >PHP 튜토리얼 >Beanstalkd 작동을 위한 PHP 메소드 및 매개변수 주석

Beanstalkd 작동을 위한 PHP 메소드 및 매개변수 주석

不言
不言원래의
2018-07-06 16:52:202472검색

이 글은 주로 PHP에서 Beanstalkd를 운영하는 방법과 매개변수 설명을 소개하고 있습니다. 이제는 모든 사람들과 공유합니다. 도움이 필요한 친구들은 참고할 수 있습니다.

Beanstalkd 소개

Beanstalk는 무엇인가요? 원래는 백그라운드에서 시간이 많이 걸리는 작업을 비동기적으로 실행하여 대용량 웹 애플리케이션 시스템의 페이지 액세스 지연을 줄이기 위해 설계된 고성능, 경량 분산 메모리 큐 시스템으로 Facebook Causes 애플리케이션을 9.5에서 지원했습니다. 백만 명의 사용자.

나중에 오픈 소스가 되었고 이제 PostRank가 대규모로 배포 및 사용되어 매일 수백만 개의 작업을 처리합니다. Beanstalkd는 전형적인 Memcached와 유사한 디자인으로 프로토콜과 사용법이 동일하므로 memcached를 사용해 본 사용자라면 Beanstalkd가 친숙하게 느껴질 것입니다.


Beanstalkd 실행 프로세스

작업의 일반적인 수명주기

   put            reserve               delete
  -----> [READY] ---------> [RESERVED] --------> *poof*

작업 상태 마이그레이션 가능

   put with delay               release with delay
  ----------------> [DELAYED] <------------.
                        |                   |
                 kick   | (time passes)     |
                        |                   |
   put                  v     reserve       |       delete
  -----------------> [READY] ---------> [RESERVED] --------> *poof*
                       ^  ^                |  |
                       |   \  release      |  |
                       |    `-------------&#39;   |
                       |                      |
                       | kick                 |
                       |                      |
                       |       bury           |
                    [BURIED] <---------------&#39;
                       |
                       |  delete
                        `--------> *poof*
Beanstalkd 설치

설치가 생략되었습니다. 필요한 경우 참조를 클릭하세요

참고: 필수 Composer 설치, 튜토리얼 링크 Composer 설치 방법

Pheanstalk 설치

작동을 위한

타사 라이브러리, 설치 생략, 필요시 클릭 참조

BeanstalkdPHPPheanstalk 작동

Beanstalkd에 연결

<?php
require __DIR__ . &#39;/vendor/autoload.php&#39;;

use Pheanstalk\Pheanstalk;

/**
 * 实例化beanstalk
 * 参数依次为:ip地址 端口号默认11300 连接超时时间 是否长连接
 */
$pheanstalk = new Pheanstalk(&#39;127.0.0.1&#39;, 11300, 3, false);
?>

Beanstalkd 상태 방법

Beanstalkd 상태

$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
        )
)

현재 파이프라인 목록

$listTubes = $pheanstalk->listTubes();

파이프라인 세부 정보 보기

$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
        )
)

미션 세부정보 보기

$job =  $pheanstalk->watch(&#39;default&#39;)->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 //释放预留任务次数
        )
)

작업 세부정보 보기(ID별)

$job =  $pheanstalk->peek(1);
$job_stats = $pheanstalk->statsJob($job);
Beanstalkd producer method

사용할 파이프라인 지정

$tube = $pheanstalk->useTube(&#39;default&#39;);

파이프라인에 데이터 삽입

$tube = $pheanstalk->useTube(&#39;default&#39;);
$put = $tube->put(
    'hello, beanstalk', // 任务内容
    1024, // 任务的优先级
    10,  // 不等待直接放到ready队列中
    60 // 处理任务的时间
);
또는:

$pheanstalk->putInTube(&#39;default&#39;,  &#39;test1&#39;, 1024, 10, 60);

Beanstalkd 소비자 방식

파이프 듣기

$tube =  $pheanstalk->watch(&#39;user&#39;);

모니터링할 필요가 없는 파이프 제거

$tube =  $pheanstalk->watch(&#39;user&#39;)->ignore(&#39;default&#39;);

파이프를 차단하여 듣기

$job =  $pheanstalk->watch(&#39;user&#39;)->reserve(4); //堵塞时间为4秒

목록 모든 청취 파이프

$pheanstalk->listTubesWatched();

watch + 예약 방법

$pheanstalk->reserveFromTube(&#39;default&#39;)

현재 작업 삭제

$job =  $pheanstalk->watch(&#39;default&#39;)->reserve();
$pheanstalk->delete($job);

현재 작업을 파이프라인에 다시 넣기

$job =  $pheanstalk->watch(&#39;default&#39;)->reserve();
$pheanstalk->release($job);

작업 갱신용 (작업 처리 시간이 현재 작업 실행 시간보다 적은 경우)

$job =  $pheanstalk->watch(&#39;default&#39;)->reserve();
$pheanstalk->touch($job);
//TODO

작업 예약

$job =  $pheanstalk->watch(&#39;default&#39;)->reserve();
$pheanstalk->bury($job);

예약 작업 해제(재실행 상태로 변경)

$job = $pheanstalk->peekBuried(&#39;default&#39;);
$pheanstalk->kickJob($job);

예약된 작업을 일괄 해제

$pheanstalk->userTube(&#39;default&#39;)->kick(999); //将id小于999的预留任务全部释放

현재 준비된 작업 읽기(준비)

$job = $pheanstalk->peekReady(&#39;default&#39;);

현재 지연된 작업 읽기(지연)

$job = $pheanstalk->peekDelayed(&#39;default&#39;);

파이프라인에 지연 설정

$pheanstalk->pauseTube(&#39;default&#39;, 100); //设置100秒延迟

파이프라인 지연 취소

$pheanstalk->resumeTube(&#39;default&#39;);
위 내용은 모두의 학습에 도움이 되기를 바랍니다. !

관련 권장사항:

PHP로 구현된 인트라넷 침투 애플리케이션 Spike가 재구성되었습니다


php는 phantomjs를 호출하여 WeChat 애플릿과 공유합니다

위 내용은 Beanstalkd 작동을 위한 PHP 메소드 및 매개변수 주석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.