Статьи

IronMQ и Laravel: настройка

Эта серия статей, состоящая из двух частей, призвана помочь новичку понять, используя очереди push с Laravel. Чтобы дать краткий обзор, окончательное решение, которое мы рассмотрим, — это простая форма для загрузки фотографий и изменения их размера. Изменение размера изображений — трудоемкая задача, поэтому вместо того, чтобы заставлять пользователя ждать изменения размера изображения, мы можем сделать это в фоновом режиме. В то же время мы научимся использовать инструмент под названием ngrok, чтобы мы могли использовать очереди в нашей локальной системе.

Исходный код предоставляется по адресу: https://github.com/phpmasterdotcom/laravel-queues

Вы также можете попробовать это на соответствующем живом сервере.

Очереди и Железо

Очередь — это не что иное, как конвейер, в котором мы выстраиваем наши задания, и они выполняются в порядке их добавления. Допустим, в настоящее время наша очередь пуста, и мы помещаем в нее задание A, затем помещаем задание B и задание C. Мы читаем очередь в том же порядке. Сначала мы берем задание A из очереди и заканчиваем его, а затем работаем над следующим. Если вы сосредоточены на части «чтение», мы всегда должны проверять нашу очередь, чтобы увидеть, будет ли опубликовано какое-либо новое задание. Разве не было бы лучше, если бы сама очередь уведомляла нас о доступности работы? Подобные очереди называются push-очередями, и это то, что мы будем использовать с IronMQ .

Iron MQ — это сервис, который делает нашу жизнь проще, когда речь идет об использовании очередей. Когда вы создаете push-очередь, вам также необходимо указать подписчика в этой очереди. Подписчик — это не что иное, как URL, который будет вызываться, когда в очереди будет доступно задание с данными, изначально предоставленными заданию.

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

Настройка и установка

На этом этапе мы устанавливаем Laravel и все необходимые зависимости через composer. Мы также создаем учетную запись в Iron и устанавливаем инструмент под названием ngrok.

Laravel

  1. Установите Composer .

  2. Установить Laravel

    composer create-project laravel/laravel --prefer-dist

    После этой команды вы должны увидеть папку «laravel». Откройте папку laravel в вашем любимом текстовом редакторе или IDE.

    Зайдите в папку через командную строку и запустите:

    php artisan serve

    На этом этапе, если вы откроете http: // localhost: 8000, вы должны увидеть домашнюю страницу вашей установки Laravel.

  3. Настройте базу данных : мы будем использовать MySQL для нашей базы данных. Создайте базу данных с помощью командной строки, phpmyadmin или любого другого удобного вам инструмента. После того, как вы создали базу данных, перейдите в app/config/app.php и найдите раздел, подобный следующему:

     'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'database', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ) 

    Заполните обязательные поля. Предполагая, что вы находитесь в локальной системе, вам необходимо предоставить учетные данные вашего сервера MySQL (имя пользователя, пароль) и имя базы данных, которую вы создали.

    Запустите php artisan migrate:install . Если вы правильно указали свои учетные данные, должно появиться следующее сообщение: Таблица миграции создана успешно.

  4. Давайте сделаем небольшое редактирование. Откройте app/views/hello.php и найдите следующую строку:

     <h1>You have arrived.</h1> 

    Измените его на (Вы можете изменить его на что угодно!):

     <h1>I am learning how to use queues!</h1> 

    Если вы откроете http: // localhost: 8000, вы сможете увидеть логотип Laravel и текст под ним: «Я учусь пользоваться очередями!».

  5. Откройте composer.json , добавьте библиотеки iron (для железных очередей push) и вмешательство (для манипулирования изображениями).

     "require": { "laravel/framework": "4.1.*", "iron-io/iron_mq": "1.4.6", "intervention/image": "dev-master" }, 

    Обновить код

     composer update 
  6. Следуйте инструкциям ниже, чтобы завершить установку вмешательства.

    Откройте файл config/app.php Laravel config/app.php . В массиве $providers добавьте поставщиков услуг для этого пакета: 'Intervention\Image\ImageServiceProvider', затем добавьте фасад этого пакета в массив $aliases : 'Image' => 'Intervention\Image\Facades\Image',

    Ссылка: http://intervention.olivervogel.net/image/getting_started/laravel

ngrok

В производственном процессе пользователи получают доступ к вашему сайту через URL-адрес, например http://example.com . Но вы все знаете, что наш локальный хост недоступен для всего Интернета, и, поскольку мы собираемся использовать Iron для реализации очередей, нам нужно разместить наш код на сервере, чтобы наш сайт был доступен для Iron. Это означает, что каждый раз, когда мы вносим изменения в наш код, мы должны загрузить его на сервер и проверить, работает ли он так, как мы планировали. Не лучше ли было бы протестировать наш код в локальной системе? Вот почему мы используем инструмент под названием ngrok, который делает наш локальный хост доступным для всего Интернета через специальный URL-адрес. Мы будем устанавливать и использовать его через секунду.

  1. Перейти к нгрок .

  2. Скачайте и установите ngrok. Следите — Как установить нгрок .

    Шаги:

    • Загрузите zip-файл для вашей операционной системы.
    • Распакуйте загруженный zip-файл
    • Вы должны быть в состоянии запустить ./ngrok --help из командной строки.
  3. Давайте сделаем наш локальный хост видимым в интернете.

    Для этого шага мы предполагаем, что Laravel все еще работает по адресу http://localhost:8000 . (Если это не так, запустите php artisan serve из командной строки в корне папки Laravel)

    (Вам нужно запустить команду ngrok через другой терминал, так как в одном терминале должен работать php artisan serve )

     ./ngrok 8000 

    Я дал порт 8000, так как наш laravel работает на 8000. После запуска команды я получаю ответ:

     Tunnel Status online Version 1.6/1.5 Forwarding http://953ffbb.ngrok.com -> 127.0.0.1:8000 Forwarding https://953ffbb.ngrok.com -> 127.0.0.1:8000 Web Interface 127.0.0.1:4040 # Conn 2 Avg Conn Time 167.38ms 

    Примечание . Ответ, который вы получаете, меняется каждый раз, когда вы запускаете ngrok. Таким образом, ответ, который вы увидите после запуска ./ngrok 8000 будет отличаться от того, что я написал выше.

    Обратите внимание на URL-адрес в разделе «Пересылка»: http://953ffbb.ngrok.com . Если вы откроете этот URL (который для вас является другим), вы сможете увидеть свой веб-сайт с логотипом Laravel и текстом, который вы написали, например: «Я учусь использовать очереди!».

    Я предлагаю вам оставить ngrok запущенным и записать URL-адрес пересылки, так как мы собираемся использовать его для этого урока.

    Если вы случайно перезапустите ngrok, ваш URL изменится. Это совсем не проблема! Просто используйте другой URL-адрес.

Iron MQ

Мы будем использовать Iron для реализации очередей в нашем проекте. Чтобы использовать Iron, сначала нужно создать аккаунт.

  1. Зайдите на http://www.iron.io/ и войдите

  2. Создать новый проект. Я назвал свой проект «Laravel Queues».

  3. Вы можете увидеть кнопку «Ключ» рядом с названием вашего проекта. Нажмите на него и скопируйте «Token» и «ID проекта» в app/config/queue.php .

    • Изменить значение по умолчанию на «железо»

       'default' => 'iron', 
    • Найдите следующий раздел:

       'iron' => array( 'driver' => 'iron', 'project' => 'your-project-id', 'token' => 'your-token', 'queue' => 'your-queue-name', ) 

      Скопируйте ваш ID проекта и токен с панели инструментов и вставьте их сюда, назовите свою очередь «laravel».

       'iron' => array( 'driver' => 'iron', 'project' => 'your-project-id', 'token' => 'your-token', 'queue' => 'laravel', ) 
  4. Как уже говорилось выше, нам нужно добавить подписчика для нашей очереди. Вы можете перейти в Laravel Push Queues и проверить официальную документацию, которой мы будем следовать сейчас:

    • Мы должны зарегистрировать абонента push-очереди, используя следующую команду (мы должны запустить эту команду из корневой папки нашего проекта)

      Исходя из вышеупомянутой ссылки, мы запустим php artisan queue:subscribe laravel http://953ffbb.ngrok.com/queue/receive

      Обратите внимание, что я использовал URL-адрес пересылки, сгенерированный ngrok. Вы должны увидеть ответ, подобный приведенному ниже:

       Queue  subscriber added :  http : //953ffbb.ngrok.com/queue/receive 

      Если вы проверите свою панель инструментов и нажмете «MQ», вы перейдете на страницу проекта. Нажмите «Очереди» и найдите очередь с именем «laravel». Если вы щелкнете по имени очереди, т.е. laravel, вы можете увидеть список подписчиков на вкладке Push Queues и найти http://953ffbb.ngrok.com/queue/receive под ним.

    • Поместите этот код в app/routes.php

       Route::post('queue/receive', function() { return Queue::marshal(); }); 

Из официальной документации:

Метод маршала позаботится о запуске корректного класса обработчика заданий. Для запуска заданий в очередь push просто используйте тот же метод Queue :: push, который используется для обычных очередей.

Завершение

В этой части:

  1. Мы установили Laravel с библиотеками Iron и Intervention. Наш laravel работает по адресу http://localhost:8000

  2. Мы установили ngrok и открыли наш локальный хост всему интернету через URL-адрес пересылки, который был сгенерирован для нас (пусть ngrok запускается в терминале).

  3. Мы настроили Iron с Laravel и создали очередь с подписчиком.

В следующей части мы сделаем тяжелую работу и испачкаем руки. Мы будем создавать наше приложение и полностью реализовывать логику работы. Будьте на связи!