网上的安装和部署教程太多了我就不贴了直接上代码吧
下载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);//0 代表任务优先级,
} 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);//3.查看NewUsers管道的信息
}
取出job 任务
public function getJob($tubename)
{
$listTubes = $this->pheanstalk->listTubes();
if (!in_array($tubename, $listTubes)) {
return false;
}
// $job = $this->conn->watch($tubename)->ignore('default')->reserve();
$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);
}