php - 在 RabbitMQ 中排队 PHP 脚本
问题描述
我正在尝试在 PHP 中使用 RabbitMQ 连续运行大约 40 个脚本。到目前为止,我所做的有点工作,但并不完全符合我的要求。
一个 PHP 脚本(最终将被安排为每晚运行)向队列发送一系列消息,如下所示:
php public_html/worker/mis-update-school.php 9195408 1
php public_html/worker/mis-update-school.php 8954001 1
php public_html/worker/mis-update-school.php 3424051 1
然后这些被消费者接收并执行如下:
public function action($msg)
{
$message = $msg->body ;
shell_exec($message);
}
这似乎有效,因为它正在等待每个脚本在下一个脚本开始之前完成。但是,这似乎是 PHP 这样做,而不是 RabbitMQ。所有 Rabbit MQ 消息似乎同时被消耗。
如何告诉 RabbitMQ 等到shell_exec()
完成后再处理下一条消息?
这很重要的原因是,在繁忙时段,我希望能够将更多的测功机添加到队列中,以便一次运行多个脚本。目前,这是不可能的,因为所有脚本都会立即从队列中拉出。
有任何想法吗?
解决方案
我似乎自己解决了这个问题,只需shell_exec()
在action($msg)
函数中添加一行即可。
public function action($msg)
{
$message = $msg->body ;
shell_exec($message);
send_remote_syslog("Job complete: $message", "mis-update-queue");
}
我很想知道为什么会这样……
推荐阅读
- ios - 清除按钮未显示在 UITextField 上
- blockchain - Ethereum Web3 - getPastEvents() 与 events.MyEvent({ fromBlock: 0}) 有什么区别?
- executescalar - 需要帮助 - 方法停留在边缘
- c# - 如何使用 FileHelpers 分隔具有不同 RowTypes 的行?
- c++ - Openmp 结果不稳健?
- autohotkey - 如果驱动器已安装,则运行程序,然后退出
- javascript - 仅 Javascript/Laravel 第一个 ID 适用于按钮
- reactjs - DELETE 出现 CORS 错误
- javascript - javascript中的动态创建表未正确显示列
- machine-learning - 具有更高抽象级别的机器学习