【问题标题】:Laravel 4.2 AWS SQS queue setup using EB worker environmentLaravel 4.2 AWS SQS 队列设置使用 EB 工作环境
【发布时间】:2015-08-01 17:49:52
【问题描述】:

我正在尝试使用 AWS SQS 和 EB Worker 环境设置 Laravel 4.2 队列。我正在将作业从另一台服务器推送到队列中,并且我希望工作环境执行它。但到目前为止,看起来工作人员试图执行它,但由于某种原因在访问日志中出现 405 错误......

我正在尝试获取一个非常简单的测试代码...在工作环境中。我几乎只使用队列配置和东西以及这个类来清理 Laravel 安装:

class TestQueue {

    public function fire($job, $data)
    {
        File::append(storage_path().'/sqs_push.txt', $data['date']);

        $job->delete();
    }
}

现在在我要推送的主服务器上,我有这个:

public function getTestQueue(){
    $data = ['date' => date('Y-m-d H:i:s')];
    $queue = \Queue::push('TestQueue', $data);
    var_dump($queue);
}

在工人上我已经启动了

php artisan queue:listen

当我运行该方法时,它会将其添加到 SQS 队列中(我可以在 SQS 控制台中看到它)并且工作人员尝试执行它,但我看到的只是访问日志中的一些 405 错误... 也许我在队列设置中做错了什么?谁能帮帮我?

【问题讨论】:

    标签: amazon-web-services laravel-4 amazon-sqs amazon-elastic-beanstalk


    【解决方案1】:

    错误 405 代表“MethodNotAllowed”,其中不允许使用指定的方法。既然您提到主服务器成功地将消息发送到 SQS(您已经通过控制台验证了它),我将提供一个实现工作线程的解决方案。这取自 GitHub 中的 this repository。查看worker.php 文件。

    $queue = new Queue(QUEUE_NAME, unserialize(AWS_CREDENTIALS));
    
    // Continuously poll queue for new messages and process them.
    while (true) {
        $message = $queue->receive();
        if ($message) {
            try {
                $message->process();
                $queue->delete($message);
            } catch (Exception $e) {
                $queue->release($message);
                echo $e->getMessage();
            }
        } else {
            // Wait 20 seconds if no jobs in queue to minimise requests to AWS API
            sleep(20);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2016-10-07
      • 2014-10-15
      • 1970-01-01
      • 2015-07-20
      相关资源
      最近更新 更多