如何使用laravel从aws SQS中检索队列?

时间:2017-06-28 09:19:23

标签: php laravel amazon-web-services queue amazon-sqs

在我的客户端服务器中,我使用Artisan::queue将队列发送到AWS SQS。在.env文件中,我配置了QUEUE_DRIVER=sqs,在config/queue.php文件中,我配置如下。

'default' => env('QUEUE_DRIVER', 'sqs'),

'sqs' => [
        'driver' => 'sqs',
        'key' => 'MY_AWS_KEY',
        'secret' => 'MY_AWS_SECRET',
        'prefix' => 'https://sqs.us-west-2.amazonaws.com/1234567890',
        'queue' => 'queue-name',
        'region' => 'us-west-2',
    ],

现在当我从Controller调用Artisan::queue时,我看到在SQS中创建了消息。我可以在AWS控制台中看到它们,它们就像下面一样。

{"job":"Illuminate\\Foundation\\Console\\QueuedJob",
 "data":[{"some_data_key":"some_data_value"}]}

到目前为止,我相信一切都很好。但我的工作层从不接收数据。我已在工作层>配置>工作人员详细信息中配置如下:

Worker queue: queue-name
Worker queue URL: https://sqs.us-west-2.amazonaws.com/1234567890/queue-name
HTTP path: /worker

在这里,我的问题是我总是在/ worker地址上得到404错误。一旦发送了消息,我就会在"飞行中的消息"中看到一个消息。在AWS SQS控制台中,当我检查工作层的日志文件时,我看到了一堆

`127.0.0.1 (-) - - [28/Jun/2017:08:37:10 +0000] "POST /worker HTTP/1.1" 404 204 "-" "aws-sqsd/2.3"`

我检查了对/ worker的post请求是否返回错误但是在不同的服务器中它可以正常工作(我无法检查工作层,因为我没有URL地址)。此时,工作层服务器只有

Route::match(['GET', 'POST'], 'worker', function () {
    return 200;
});
routes/web.php

查看POST请求是否可以到达。

我做错了什么?我错过了什么?或者以错误的方式实施它?

1 个答案:

答案 0 :(得分:0)

如果您在弹性豆茎中使用工作环境,请确保

  

配置 - >软件配置 - >容器选项 - >文档根

设置为值

  

/公共

同时检查您的路线提供商

  

应用程序/提供者/ RouteServiceProvider.php

检查map()函数以查看是否要创建到适当文件的http路由。可以引用多个路由文件,如web.php和api.php等