无法让Beanstalkd Queue适用于PHP

时间:2016-05-20 21:55:35

标签: php linux queue beanstalkd

我让Ubuntu运行XAMPP(灯栈:Linux,Apache,MySQL,PHP,Pear )。我想一起使用PHP和Beanstalkd来创建一个简单的队列,当用户进入 page1.php 时, JOB 会被发送到 QUEUE 对于 WORKER 来捕获。 JOB 将是 WORKER 随后将执行的SQL语句:

到目前为止,我所做的是:

  1. 已安装的Beanstalkd:sudo apt-get install beanstalkd

  2. 开发了php代码和必须在 page1.php 中完成的“工作”。工作是将sql语句$sql发送到队列以供worker执行(在将来的版本中) 这项工作将变得更加复杂,因此队列系统将变得更加重要。):

  3. page1.php中:     

    if (isset($_SESSION['authenticated']))
    {
        //if the user is logged in, send an sql statement to the queue
        $user_id = $_SESSION['id'];
        $sql = "UPDATE user_table SET count = count + 1 WHERE id = {$user_id}";
    
        //... missing code that would send the statement
    }
    
    ?>
    
    1. 开发了必须由 WORKER
    2. 完成的操作

      工人:

      <?php
      
          $stmt = $conn->query($sql);//simple update
      
      ?>
      

      问题/问题:

      问题是我不知道调用什么函数创建一个worker,调用什么函数来发送队列。我在网上搜索了各种例子, 但是没有完整的解释和非常含糊的解释。我看到有一种叫做pheanstalkd的东西,我读到的是一个包装器 对于beanstalkd而且很多人都在网上使用它,但我不确定这是否是一个要求。任何人都可以指导我进入正确的方向,我需要调用哪些函数或者我需要在linux终端中执行哪些代码才能让这个例子正常工作? 非常感谢所有反馈意见,这将有助于我本周不再散发任何头发。

1 个答案:

答案 0 :(得分:1)

解决方案:

经过一些更多的研究,我已经设法让它发挥作用!达到这一点时,缺少一笔不错的金额。该过程如下:

  1. 在linux终端执行sudo apt-get install beanstalkd以安装beanstalkd。
  2. 执行sudo apt install composer安装composer,这是推荐用于安装pheanstalk的程序。
  3. 创建一个composer.json文件,让作曲家知道要下载哪个库以及所述库的版本。例如:

    {
      "require": {
        "pda\pheanstalk": "2.1.1"
      }
    }
    
  4. 在linux终端中执行composer install。这必须在与composer.json文件相同的文件夹中完成。

  5. 包含将启动Pheanstalk类的必要代码,并按照文档使用它。就是这样!示例代码如下:

    <?php
    
    require_once('vendor/autoload.php');//require the autoload file provided by
                                        //composer
    
    //Initiate an instance of the Pheanstalk class
    $pheanstalk = new Pheanstalk_Pheanstalk('127.0.0.1');
    
    //adding a job to queue/tube testtube:
    $pheanstalk->useTube('testtube')->put('message');
    
    //obtaining the job by a worker:
    $job = $pheanstalk->watch('testtube')->ignore('default')->reserve();
    
    echo $job->getData;//outputting the message
    
    $pheanstalk->delete($job);//deleting the job from the queue.
    
    ?>