无法让 Beanstalkd 队列为 PHP 工作

Unable to get Beanstalkd Queue to work for PHP

我有 Ubuntu 运行 XAMPP(lamp 堆栈:Linux、Apache、MySQL、 PHP,梨)。我想一起使用 PHP 和 Beanstalkd 来制作一个简单的队列,当用户继续 page1.php 时,一个 JOB 被发送到 QUEUE 以供 WORKER 捕获。 JOB 将是一个 SQL 语句,然后 WORKER 将执行:

我目前所做的是:

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

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

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. 制定了必须由 工人 完成的操作。

工人:

<?php

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

?>

问题/问题:

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

已找到解决方案:

经过更多的研究,我设法让它工作了!达到这一点还缺少相当数量的资金。过程如下:

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

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

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

    <?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.
    
    ?>