0

我正在使用 ubuntu 12.04 运行 ec2 实例。

我正在使用aws基础设施,现在我正在尝试实现一个消费者工作者,它将消费一个sqs队列(msgs队列,不是很重要)。

为此,我创建了一个 php 文件,该文件“收获”队列 30 秒。最重要的是,我有一个 crontab 每 30 秒运行一次此页面。

什么是更优雅/更合适的解决方案?我如何制作一个后台 php 进程,以及如何检查它是否还活着,如果需要,将其杀死并重新启动它?

  • 只是一个澄清 - 我问的是消耗队列的过程,无论选择哪个/什么机械化(sqs,rabbitMQ)

感谢您的帮助

4

2 回答 2

1

我会建议RabbitMQ ( GitHub )。它是一个基于新兴标准的完整且高度可靠的企业消息传递系统。在这里查看他们的示例。

RabbitMQ 管理器

于 2013-05-20T07:16:53.407 回答
-1

使用类进程(我从 php 文档复制)创建一个监控脚本,如果进程没有运行,它将启动您的工作脚本。监控脚本可以将 pid 保存在文件中。

然后只需将监视器添加到 crontab。

class Process{
    private $pid;
    private $command;

    public function __construct($cl=false){
        if ($cl != false){
            $this->command = $cl;
            $this->runCom();
        }
    }
    private function runCom(){
        $command = 'nohup '.$this->command.' > /dev/null 2>&1 & echo $!';
        exec($command ,$op);
        $this->pid = (int)$op[0];
    }

    public function setPid($pid){
        $this->pid = $pid;
    }

    public function getPid(){
        return $this->pid;
    }

    public function status(){
        $command = 'ps -p '.$this->pid;
        exec($command,$op);
        if (!isset($op[1]))return false;
        else return true;
    }

    public function start(){
        if ($this->command != '')$this->runCom();
        else return true;
    }

    public function stop(){
        $command = 'kill '.$this->pid;
        exec($command);
        if ($this->status() == false)return true;
        else return false;
    }
}
于 2013-05-23T17:22:34.157 回答