php 使用beanstalk进行消息队列

下载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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值