Получение данных из AWS SQS и обновление до ElasticSearch с помощью Laravel

Я новичок в AWS и Laravel. Я пытаюсь получить сообщения из AWS SQS, используя метод $client->receiveMessage. Каждое сообщение содержит значение идентификатора {'id': 'dynamic-id'}, которое используется для чтения данных из базы данных (mysql) и обновления данных до elastic search. Ниже мой код, который выполняет указанные выше функции. Также сообщения добавляются от lambda.

    use Aws\Sqs\SqsClient; 
    use Aws\Exception\AwsException;

    $client = new SqsClient([
      'region' => 'my-region',
      'version' => '2012-11-05'
    ]);

    while(true) {
      try {
        $result = $client->receiveMessage(array(
            'AttributeNames' => ['SentTimestamp'],
            'MaxNumberOfMessages' => 1,
            'MessageAttributeNames' => ['All'],
            'QueueUrl' => $queueUrl, // REQUIRED
            'WaitTimeSeconds' => 5,
        ));
        if (!empty($result->get('Messages'))) {
            $idJSON = json_decode($result->get('Messages')[0]['Body'], true);
            static::update_to_elastic_search($idJSON['id']);
            $result = $client->deleteMessage([
              'QueueUrl' => $queueUrl, // REQUIRED
              'ReceiptHandle' => $result->get('Messages')[0]['ReceiptHandle'] // REQUIRED
            ]);
        } else {
            echo "No messages in queue. \n";
        }
      } catch (AwsException $e) {
          // output error message if fails
          error_log($e->getMessage());
      }
    } 

В настоящее время я запускаю этот код из консоли php artisan tinker, используя объект и метод класса.

$s = new SQSAws;
$s->recive_message_from_sqs_and_update_to_es();

Я хочу, чтобы это работало постоянно, без какого-либо ручного вмешательства. Всякий раз, когда сообщение помещается в очередь, код будет читать и обновлять данные. Как я могу это сделать? Я пробовал с очередью laravel, но снова мне нужно поддерживать эту очередь в другой базе данных.


person Avijit Majhi    schedule 25.06.2020    source источник
comment
очереди Laravel поддерживают SQL, так что вы, вероятно, можете переписать этот код как задание. этот вопрос имеет аналогичную проблему, и предлагаемое решение заключалось в использовании очередь laravel   -  person apokryfos    schedule 25.06.2020
comment
@apokryfos Спасибо, я пробовал с очередью, но это снова стало сложным, поэтому мне нужно еще одно предложение, где я могу запустить эту задачу с помощью супервизора в производстве.   -  person Avijit Majhi    schedule 25.06.2020
comment
Вы можете превратить этот код в команду artisan и запустить ее так же, как и обработчик очереди.   -  person apokryfos    schedule 25.06.2020
comment
@apokryfos, да, я думаю об этом. Спасибо за поддержку. Итак, я могу запустить команду и с помощью супервизора, верно?   -  person Avijit Majhi    schedule 25.06.2020
comment
Да, работник очереди Laravel делает это, источником этой команды является здесь, если вы хотите спуститься в кроличью нору.   -  person apokryfos    schedule 25.06.2020