Laravel Команда в контроллере не работает с очередью AWS - PullRequest
0 голосов
/ 03 апреля 2020

Я написал команду, которая получает некоторые данные из БД, и эти данные отправляются в очередь AWS для обработки. эта команда запускается через консоль и работает отлично, но когда я запускаю эту команду в контроллере из API, это вызывает ошибку. Заранее спасибо.

Командный класс:

<?php
namespace App\Console\Commands;

use App\Http\Base\Contracts\IActivityLiquidation;
use App\Jobs\AuthorizeOrganizersInvoiceJob;
use Illuminate\Console\Command;
use Exception;
use Log;

class ElectronicBillingOrganizerCron extends Command
{
    protected $signature = 'electronicBilling:organizer {activityIds?*}';
    protected $IActivityLiquidation;

    public function __construct(IActivityLiquidation $IActivityLiquidation)
    {
        parent::__construct();
        $this->IActivityLiquidation = $IActivityLiquidation;
    }

    public function handle()
    {   
        try 
        {   
            Log::info("############### ELECTRONIC-BILLING-ORGANIZER::CRON::START ###############");
            $this->getData();
            AuthorizeOrganizersInvoiceJob::dispatch($this->event)->onConnection('sqs_electronic_billing_organizer');
            Log::info("############### ELECTRONIC-BILLING-ORGANIZER::CRON::END ###############");

        } 
        catch (\Exception $ex) 
        {
            Log::error("############### ELECTRONIC-BILLING-ORGANIZER::CRON::ERROR ###############".$ex);
        }
    }

    public function getData(){
        $this->event = $this->IActivityLiquidation->getData();
    }
}

РАБОЧИЙ КЛАСС

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

use Exception;
use Log;
use DB;

class AuthorizeOrganizersInvoiceJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $event;

    public function __construct($event)
    {
        $this->event = $event;
    }

    public function handle()
    {   
        try 
        {   
            $this->someLogicHere();
        } 
        catch (\Exception $ex) 
        {
            Log::error($ex);
        }
    }  
}

КОМАНДА

электронный счет: органайзер

==> пока здесь все работает отлично, но сейчас.

API ENDPOINT

Route::post('/force', 'ElectronicBillingController@force');

КОНТРОЛЛЕР API

<?php

namespace App\Http\Controllers;

use App\Http\Controller;
use Illuminate\Support\Facades\Artisan;
use Exception;
use Log;

class ElectronicBillingController extends Controller
{
    public function __construct()
    {
    }

    public function force()
    {
        Artisan::queue('electronicBilling:organizer');
    }
}

==> если я потребляю эта конечная точка, я получаю эту ошибку


2020-04-02 20:02:23] local.INFO: ############### ELECTRONIC-BILLING-ORGANIZER::CRON::START ###############  
[2020-04-02 20:02:28] local.ERROR: ############### ELECTRONIC-BILLING-ORGANIZER::CRON::ERROR ###############exception 'Aws\Sqs\Exception\SqsException' with message 'Error executing "SendMessage" on "https://sqs.us-west-2.amazonaws.com/9384728499/SQS-ELECTRONIC-BILLING-STATUS-local"; AWS HTTP error: Client error: `POST https://sqs.us-west-2.amazonaws.com/9384728499/SQS-ELECTRONIC-BILLING-STATUS-local` resulted in a `403 Forbidden` response:
<?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Type>Sender</Type><Code>A (truncated...)
 AccessDenied (client): Access to the resource https://sqs.us-west-2.amazonaws.com/9384728499/SQS-ELECTRONIC-BILLING-STATUS-local is denied. - <?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Type>Sender</Type><Code>AccessDenied</Code><Message>Access to the resource https://sqs.us-west-2.amazonaws.com/9384728499/SQS-ELECTRONIC-BILLING-STATUS-local is denied.</Message><Detail/></Error><RequestId>1a8e53d6-69ca-59c6-8b16-04d6e4ae30e7</RequestId></ErrorResponse>'

GuzzleHttp\Exception\ClientException: Client error: `POST https://sqs.us-west-2.amazonaws.com/9384728499/SQS-ELECTRONIC-BILLING-STATUS-local` resulted in a `403 Forbidden` response:
<?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Type>Sender</Type><Code>A (truncated...)
 in /var/www/html/project/app/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113
Stack trace:
#0 /var/www/html/project/app/vendor/guzzlehttp/guzzle/src/Middleware.php(66): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response))
#1 /var/www/html/project/app/vendor/guzzlehttp/promises/src/Promise.php(203): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response))
#2 /var/www/html/project/app/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleHttp\Psr7\Response), Array)
#3 /var/www/html/project/app/vendor/guzzlehttp/promises/src/TaskQueue.php(47): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}()
#4 /var/www/html/project/app/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(98): GuzzleHttp\Promise\TaskQueue->run()
#5 /var/www/html/project/app/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(125): GuzzleHttp\Handler\CurlMultiHandler->tick()
#6 /var/www/html/project/app/vendor/guzzlehttp/promises/src/Promise.php(246): GuzzleHttp\Handler\CurlMultiHandler->execute(true)
#7 /var/www/html/project/app/vendor/guzzlehttp/promises/src/Promise.php(223): GuzzleHttp\Promise\Promise->invokeWaitFn()
#8 /var/www/html/project/app/vendor/guzzlehttp/promises/src/Promise.php(267): GuzzleHttp\Promise\Promise->waitIfPending()
#9 /var/www/html/project/app/vendor/guzzlehttp/promises/src/Promise.php(225): GuzzleHttp\Promise\Promise->invokeWaitList()
#10 /var/www/html/project/app/vendor/guzzlehttp/promises/src/Promise.php(267): GuzzleHttp\Promise\Promise->waitIfPending()
#11 /var/www/html/project/app/vendor/guzzlehttp/promises/src/Promise.php(225): GuzzleHttp\Promise\Promise->invokeWaitList()
#12 /var/www/html/project/app/vendor/guzzlehttp/promises/src/Promise.php(62): GuzzleHttp\Promise\Promise->waitIfPending()
#13 /var/www/html/project/app/vendor/aws/aws-sdk-php/src/AwsClientTrait.php(58): GuzzleHttp\Promise\Promise->wait()
#14 /var/www/html/project/app/vendor/aws/aws-sdk-php/src/AwsClientTrait.php(86): Aws\AwsClient->execute(Object(Aws\Command))
#15 /var/www/html/project/app/vendor/laravel/framework/src/Illuminate/Queue/SqsQueue.php(89): Aws\AwsClient->__call('sendMessage', Array)
...