首页 > 解决方案 > 在 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()完成后再处理下一条消息?

这很重要的原因是,在繁忙时段,我希望能够将更多的测功机添加到队列中,以便一次运行多个脚本。目前,这是不可能的,因为所有脚本都会立即从队列中拉出。

有任何想法吗?

标签: phprabbitmq

解决方案


我似乎自己解决了这个问题,只需shell_exec()action($msg)函数中添加一行即可。

public function action($msg)
        {
            $message = $msg->body ;

            shell_exec($message);

            send_remote_syslog("Job complete: $message", "mis-update-queue");

        }

我很想知道为什么会这样……


推荐阅读