Php 运行Zend队列接收器的基础结构

Php 运行Zend队列接收器的基础结构,php,zend-framework,cron,zend-queue,Php,Zend Framework,Cron,Zend Queue,我有一个简单的消息队列设置,并使用对象继承机制运行。我用的是后端。我感兴趣的是将其用作作业队列,以便安排稍后处理的事项。这些工作不需要立即进行,但应该尽早进行 是否有最佳做法/标准方法来设置基础结构以运行作业?我理解从队列接收消息的代码,但我不太清楚的是如何运行执行该接收的程序。在命令行上接收n条消息的cron,每分钟运行一次?触发多个web请求的cron,每个web请求都运行接收方脚本?还有别的吗 切向奖金问题。如果我使用Zend_Db运行其他查询,消息队列查询会被视为该事务的一部分吗?您可以

我有一个简单的消息队列设置,并使用对象继承机制运行。我用的是后端。我感兴趣的是将其用作作业队列,以便安排稍后处理的事项。这些工作不需要立即进行,但应该尽早进行

是否有最佳做法/标准方法来设置基础结构以运行作业?我理解从队列接收消息的代码,但我不太清楚的是如何运行执行该接收的程序。在命令行上接收n条消息的cron,每分钟运行一次?触发多个web请求的cron,每个web请求都运行接收方脚本?还有别的吗


切向奖金问题。如果我使用Zend_Db运行其他查询,消息队列查询会被视为该事务的一部分吗?

您可以像线程池一样执行。创建一个命令行php脚本来处理接收。它应该由一个shell脚本启动,该脚本在进程死亡时自动重新启动进程。如果shell脚本已在运行,则不应启动该进程(使用$pid.running文件或类似文件)。让cron每1-10分钟运行几次。这应该能很好地处理接收问题

我不会让cron触发web请求,除非您的cron出于某种奇怪的原因位于另一台服务器上

另一种使用这种方法的方法是让一些后台进程创建数据,web用户在自然浏览站点时使用这些数据。报表生成器可能是这样工作的。公司范围的报告可供所有用户使用,但您不希望所有用户都生成此数据库/时间密集型报告。因此,您可以创建一个队列,并一次处理一个队列,以消除重复项。准备好后,所有用户都可以查看报告

zend db甚至不像其他zend_db查询那样使用相同的连接。当然,最好的办法是做一个简单的测试

编辑 cron中的多行用于并发。每行表示池的一个工作线程。我不清楚,您不希望pid作为标识符,而是希望将其作为参数传递

          • /home/byron/run_queue.sh进程1
          • /home/byron/run_queue.sh Process2
          • /home/byron/run_queue.sh Process3
如果发现$process.running文件退出,bash脚本将检查该文件

否则:

  • 创建$process.running文件
  • 启动php进程。阻塞/等待,直到完成
  • 删除$process.running文件
这允许php脚本死亡,但不会导致池失去工作线程


如果队列为空,php脚本将立即退出,并通过cron的nex调用再次启动。

后续问题;(如果这是天真/明显的,则表示歉意)。你是在建议我1。编写一个PHP程序来接收消息;2.编写一个shell脚本,查找由PHP脚本?创建的$pid.running文件?;3.如果找不到$pid.running文件,请启动PHP脚本,然后退出?;4.在crontab中有许多行用于启动shell脚本。其中一些将运行,请参阅$pid.running文件并退出,但通过每分钟运行多次尝试,可以确保程序定期持续运行/重新运行;我有它,还是我遗漏了什么?我也忘了,你也可以通过查看文件的创建日期来设置正在运行的文件的超时。。你需要让你的php脚本只处理x个条目,然后退出,这样你就知道运行最长的脚本需要多长时间。感谢您花时间为我解释这一点,在新手层次的细节!