如何用PHP设置Beanstalkd

如何用PHP设置Beanstalkd,php,bash,message-queue,daemon,beanstalkd,Php,Bash,Message Queue,Daemon,Beanstalkd,最近我一直在研究Beanstalkd在PHP中的使用。我学到了很多东西,但对服务器上的设置等有一些问题 以下是我对其工作原理的看法: 我在Ubuntu服务器上安装Beanstalkd和任何依赖项(如libevent)。然后启动Beanstalkd守护进程(基本上应该一直运行) 在我的网站中的某个地方(例如当用户执行某些操作等),任务被添加到Beanstalkd队列中的各个管道中 我有一个bash脚本(比如下面的脚本),它作为一个deamon运行,基本上执行一个PHP脚本 #!/bin/sh ph

最近我一直在研究Beanstalkd在PHP中的使用。我学到了很多东西,但对服务器上的设置等有一些问题

以下是我对其工作原理的看法:

  • 我在Ubuntu服务器上安装Beanstalkd和任何依赖项(如libevent)。然后启动Beanstalkd守护进程(基本上应该一直运行)
  • 在我的网站中的某个地方(例如当用户执行某些操作等),任务被添加到Beanstalkd队列中的各个管道中
  • 我有一个bash脚本(比如下面的脚本),它作为一个deamon运行,基本上执行一个PHP脚本

    #!/bin/sh
    php worker.php
    
  • 4) worker脚本将具有以下内容来执行排队的任务:

    while(1) {
      $job = $this->pheanstalk->watch('test')->ignore('default')->reserve();
      $job_encoded = json_decode($job->getData(), false);
      $done_jobs[] = $job_encoded;
      $this->log('job:'.print_r($job_encoded, 1));
      $this->pheanstalk->delete($job);
    }
    
    下面是我根据上述设置提出的问题(如果我错了,请纠正我):

  • 假设我有一个将RSS提要导入数据库或其他东西的任务。如果10个用户同时这样做,他们都将在“试管”中排队。然而,他们一次只能执行一个。让10个不同的管道同时执行会更好吗

  • 如果我确实需要更多的管道,那么这是否也意味着我需要10个工作脚本?每个tube对应一个,除了watch()函数中的字符串文字外,所有代码基本相同

  • 如果我以守护进程的形式运行该脚本,它是如何工作的?它会一直执行worker.php脚本吗?理论上,该脚本循环直到队列为空,所以不应该只启动一次吗?守护进程如何决定执行worker.php的频率?那只是一个场景吗

  • 谢谢

  • 如果工人取饲料的时间不太长,就可以了。如果需要一次处理多个工作进程,则可以运行多个工作进程。我有一个系统(目前使用AmazonSQS,但我以前也用BeanstalkD做过类似的工作),最多有200名(或更多)工人从队列中撤出
  • 一个工作脚本(同一个脚本运行多次)应该可以-该脚本可以同时观察多个管道,第一个可用的管道将被保留。您还可以使用
    job stat
    命令查看特定$job来自何处(哪个管道),或者如果需要区分每种类型和另一种类型,可以在消息中添加一些元信息
  • 运行工人的一个好例子是。我还添加了(也是一个用于入门的工具)来轻松启动并保持每台机器运行大量的worker(我运行shell脚本,如中所示)。我会限制它循环的次数,并在
    reserve()
    中输入一个数字,让它等待几秒钟或更长时间,以便下一个作业在一个不会暂停的紧密循环中不失控地旋转,即使没有什么事情可做
  • 增编:

  • shell脚本将根据需要多次运行。(该链接显示了如何使用
    exec$@
    根据需要重新运行它)。只要php脚本退出,它就会重新运行php
  • 显然,有一个Djanjo应用程序可以显示一些统计信息,但是连接到守护进程,获取一个管道列表,然后获取每个管道的统计信息,或者只是计数,就足够简单了

  • 谢谢你的链接!我一定会调查的。关于#2的问题:该脚本多久执行一次?这完全取决于守护进程执行bash脚本的频率吗?另外,是否有任何方便的方法(通过代码片段或“仪表板”类型的东西)来查看beanstalk的所有执行情况,等等?大多数/所有库都应该提供对stats、list tube和stat tube命令的调用。还有一些其他的。我没见过跑步,但那也可以做一些事情。