PHP使用Beanstalkd搭建消息队列、延迟队列
- 官网地址:https://kr.github.io/beanstalkd/,请自行安装试用您自己系统的pheanstalk软件;
- 创建项目并安装类库:composer require pda/pheanstalk
- 创建服务注册文件:status.php,内容如下
<?php require __DIR__ . '/vendor/autoload.php'; use Pheanstalk\Pheanstalk; $pheanstalk = Pheanstalk::create('127.0.0.1'); print_r($pheanstalk->statsTube('testtube'));
- 创建生产者文件:producer.php,内容如下
<?php require __DIR__ . '/vendor/autoload.php'; use Pheanstalk\Pheanstalk; $pheanstalk = Pheanstalk::create('127.0.0.1'); $pheanstalk ->useTube('testtube') ->put( json_encode(['test' => 'data' . date('Y-m-d H:i:s', time())]), Pheanstalk::DEFAULT_PRIORITY, 10, // 延迟执行10s 60 // 如果失败,60s后重试 );
- 创建消费者文件:consumer.php,内容如下
<?php require __DIR__ . '/vendor/autoload.php'; use Pheanstalk\Pheanstalk; $pheanstalk = Pheanstalk::create('127.0.0.1'); while (true) { $job = $pheanstalk->watch('testtube')->ignore('default')->reserve(); $data = $job->getData(); // 请自行创建rest.php文件 $fp = fopen('rest.php', "w"); fwrite($fp, "<?php exit();?>" . $data); fclose($fp); print_r($data); $pheanstalk->delete($job); }
- 完成后运行status.php、producer.php,这两个文件为常驻内存
- 执行consumer.php文件,rest.php会被写入内容