下载pheanstalk类
composer require pda/ pheanstalk
创建自有类库
构造类 初始化链接
use Pheanstalk\Pheanstalk;
private function __construct ( )
{
try {
$this - > pheanstalk = new Pheanstalk ( config ( "beanstalk.hostname" ) , config ( "beanstalk.port" ) ) ;
$isRes = $this - > pheanstalk- > getConnection ( ) - > isServiceListening ( ) ;
if ( ! $isRes) {
$this - > pheanstalk = false ;
}
} catch ( \ Exception $e) {
throw new \ Exception( "beanstalk server connection is null,error message:" . $e- > getMessage ( ) ) ;
}
if ( ! $this - > pheanstalk) {
throw new \ Exception( "beanstalk server not connection;" ) ;
}
}
获取该类对下 (单列模式)
public static function getInstance ( )
{
if ( empty ( self: : $instance) || ! ( self: : $instance instanceof self ) ) {
self: : $instance = new self ( ) ;
}
return self: : $instance;
}
生产方法
public function producer ( $tubename, $data, $delayTime = 0 , $priority = 0 )
{
if ( empty ( $tubename) || empty ( $data) ) {
return false ;
}
$data = is_array ( $data) ? json_encode ( $data) : $data;
if ( ! is_string ( $data) ) {
return false ;
}
$id = 0 ;
try {
if ( ! empty ( $delayTime) && $delayTime > 0 ) {
$delayTime = intval ( $delayTime) ;
$priority = empty ( $priority) ? 0 : intval ( $priority) ;
$id = $this - > pheanstalk- > useTube ( $tubename) - > put ( $data, $priority, $delayTime) ;
} else {
$id = $this - > pheanstalk- > useTube ( $tubename) - > put ( $data) ;
}
} catch ( \ Exception $e) {
throw new \ Exception( $e- > getMessage ( ) ) ;
}
return $id;
}
public function statusTube ( $tubeName)
{
return $this - > pheanstalk- > statsTube ( $tubeName) ;
}
取出job 任务
public function getJob ( $tubename)
{
$listTubes = $this - > pheanstalk- > listTubes ( ) ;
if ( ! in_array ( $tubename, $listTubes) ) {
return false ;
}
$timeout = config ( 'beanstalk.timeout' ) ;
$timeout = ! empty ( $timeout) ? $timeout: 3 ;
$job = $this - > pheanstalk- > watch ( $tubename) - > ignore ( 'default' ) - > reserve ( $timeout) ;
return empty ( $job) ? false : $job;
}
取出job 的任务转成数组
public function getData ( $job)
{
if ( empty ( $job) ) {
return false ;
}
$data = $job- > getData ( ) ;
$data = empty ( $data) ? false : $data;
return $data;
}
重新放回管道
public function release ( $job) {
if ( empty ( $job) ) {
return false ;
}
$this - > pheanstalk- > release ( $job) ;
}
删除方法
public function delete ( $job)
{
if ( empty ( $job) ) {
return false ;
}
$this - > pheanstalk- > delete ( $job) ;
}