Laravel 4.2 AWS SQS 队列设置使用 EB 工作环境
Posted
技术标签:
【中文标题】Laravel 4.2 AWS SQS 队列设置使用 EB 工作环境【英文标题】:Laravel 4.2 AWS SQS queue setup using EB worker environment 【发布时间】: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 错误... 也许我在队列设置中做错了什么?谁能帮帮我?
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于Laravel 4.2 AWS SQS 队列设置使用 EB 工作环境的主要内容,如果未能解决你的问题,请参考以下文章
如何从外部 SQS 队列活动触发 AWS Lambda 函数