- 您如何为面向队列的系统设置一个或多个工作脚本?
- 您如何根据需要安排启动 - 并在必要时重新启动 - 工作脚本?(我正在考虑诸如 init.d/、基于 Ruby 的“上帝”、DJB 的 Daemontools 等工具)
我正在开发一个异步队列/工作系统,在这种情况下使用 PHP 和BeanstalkdD(尽管实际的语言和守护进程并不重要)。任务本身并不太难——将带有命令和参数的数组编码为 JSON,以便通过 Beanstalkd 守护程序进行传输,然后在工作脚本中提取它们以根据需要对其进行操作。
还有许多其他类似的队列/工作者设置,例如Starling、Gearman、Amazon 的 SQS和其他更多面向“企业”的系统,例如 IBM 的 MQ 和 RabbitMQ。如果你运行 Gearman 或 SQS 之类的东西 - 你如何启动和控制工作池?问题在于最初的工人启动,然后能够添加额外的额外工人,随意关闭它们(尽管我可以通过队列发送消息以关闭它们 - 只要一些“观察者”不会自动重新启动它们)。这不是 PHP 问题,它是关于直接设置一个或多个进程以在启动时运行的 Unix 进程,或者向池中添加更多工作人员。
循环脚本的bash 脚本已经到位 - 这会调用 PHP 脚本,然后从队列中收集并运行任务,偶尔退出以便能够自行清理(它也可以在失败时暂停几秒钟,或通过计划的活动)。这很好用,在此基础上构建工作进程一点也不难。
获得一个好的工作控制器系统是关于灵活性的,在机器启动时自动启动一个或两个,并且能够在队列繁忙时从命令行添加更多,在不再需要时关闭额外的。