代码之家  ›  专栏  ›  技术社区  ›  Alana Storm

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

  •  1
  • Alana Storm  · 技术社区  · 16 年前

    我有一个简单的消息队列设置,并使用 Zend_Queue 反对继承权。我用的是 Zend_Queue_Adapter_Db 后端。我有兴趣将它用作工作队列,以便在以后安排处理。他们的工作不需要立即发生,但应该发生得更快,而不是更晚。

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

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

    1 回复  |  直到 12 年前
        1
  •  2
  •   Byron Whitlock    16 年前

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

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

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

    According to the docs 它看起来不像ZendDB甚至使用与其他ZendDB查询相同的连接。当然,找到答案的最好方法是做一个简单的测试。

    编辑 cron中的多行用于并发性。每行代表池的一个工作人员。我不清楚,你不想把pid作为标识符,你想把它作为参数传递。

            • /home/byron/run_queue.sh进程1
            • /home/byron/run_queue.sh进程2
            • /home/byron/run_queue.sh进程3

    如果bash脚本发现$process.running文件退出,它将检查该文件。

    否则:

    • 创建$process.running文件。
    • 启动PHP进程。阻止/等待直到完成。
    • 删除$process.running文件。

    这允许PHP脚本死亡,但不会导致池释放工作线程。

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

    推荐文章