Laravel & AWS SQS CSV импорт

Инструменты:

Laravel & AWS SQS

Описание:

Я разрабатываю часть системы импорта CSV в мою базу данных. Но как происходит импорт? было бы немного больше, чем просто импорт CSV. Процесс импорта будет происходить автоматически и в фоновом режиме, очевидно, с использованием очереди.

Процесс желаний:

  1. Загрузил файл (csv) в AWS S3 Bucket (например, *** - dev-s3-ftp)
  2. AWS отправляет уведомление о событии, отправляя его в очередь с форматом сообщения следующим образом: https://docs.aws.amazon.com/AmazonS3/latest/dev/notification-content-structure.html: сразу после загрузки файла.
  3. Laravel слушаю с очередью: работаю, получаю список вакансий
  4. Как только появятся новые задания, извлеките информацию о файле из тела сообщения и импортируйте файл csv в базу данных, готово.

Замечания:

Процессы № 1 и № 2 полностью связаны с AWS, поэтому я считаю, что Laravel не нужно ничего посылать, кроме прослушивания очереди и получения задания, обработки импорта.

Проблема:

  1. Я не знаю, как получить очередь или задание от Laravel без отправки, все документы касаются отправки ОТ Laravel, и сама работа выполняла этот процесс.
  2. Когда я запускаю команду artisan "php artisan queue: work", я получаю эту ошибку

[2018-06-22 12:03:52] local.ERROR: неопределенный индекс: работа {"исключение":"[объект] (ErrorException(код: 0): неопределенный индекс: работа в /home/vagrant/www/html/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php:227)[stacktrace]

Я сделал некоторый прогресс? может быть?

Что касается проблемы # 1, я слушаю очередь из загрузочного метода AppServiceProvider, как это

Queue::before(function (JobProcessing $event) {
       $payload = $event->job->payload();
       app()->call(RouteController::class . "@importCsv", ['payload' => $payload]);
});

Это слушает очередь и обрабатывает работу, и я очень сомневаюсь, что это должно быть сделано так.

Что касается проблемы № 2, когда я отправляю очередь из laravel, она успешно отправляется в очередь AWS SQS в таком формате

{ "DisplayName":"TBuySell\ Вакансии \WatchCsvFile","работа": "Осветите \Queue\CallQueuedHandler@ называют","maxTries":3,"тайм-аут":120,"timeoutAt": нулевой, "данные":{"имя_команды": "TBuySell \ Работа \WatchCsvFile","команда": "О:26:\"TBuySell\ Работа \WatchCsvFile\":10:{s:7:\" тайм-аут \"; я:120;s:5:\"пытается \", я:3;s:14:\"\u0000*\u0000tagcategory\";O:45:\"осветить \ контракты \Database\ModelIdentifier\":3:{s:5:\"класс \";s:26:\"TBuySell\ Модель \TagCategory\";s:2:\"идентификатор \", я:1;s:10:\"соединение \";s:5:\"MySQL \";}s:6:\"\u0000*\u0000job\"N;s:10:\" соединение \ "N;s:5:\" очередь \ "N;s:15:\"chainConnection\"N;s:10:\"chainQueue\"N;s:5:\" задержка \ "N;s:7:\" прикован \"; а:0:{}}"}}

Работник очереди извлекает задание, обрабатывает и успешно его обрабатывает без ошибок в журнале ошибок laravel. Но, как в мире, индекс "задания" не определен, а я просто извлекаю "тело сообщения" из очереди, которое может быть любого формата. Я, вероятно, очень неопытный...

Вопрос:

  1. Как я полагаю, чтобы прослушать / получить очередь / задание из AWS SQS и обработать часть импорта отсюда без необходимости отправлять задание.
  2. Почему отсутствует индекс "работа"? Как я должен добавить?

Разъяснение:

У меня только 1 очередь и будет несколько сообщений. Я пытаюсь получить последнее сообщение, вставить информацию о файле в тело сообщения и обработать процедуру импорта.

0 ответов

Другие вопросы по тегам