Внедряването на приложение на Laravel в Google App Engine е доста лесна задача благодарение на наличната документация. Но ефективното настройване на асинхронна обработка на задачи (Laravel Eventing) в Google Cloud не е толкова просто.

Един от начините, по които можем да направим това, е като използваме файла supervisord.conf, за да настроим командата Laravel queue:listen. Но това е налично само за гъвкава среда на Google App Engine. Така че, ако имате нужда от решение за стандартна среда на Google App Engine, тогава трябва да използвате Google Cloud Tasks за обработка на асинхронни задания.

Google Cloud Tasks е напълно управлявана услуга, която ви позволява да управлявате изпълнението, изпращането и доставката на голям брой разпределени задачи. С помощта на Cloud Tasks можете да извършвате работа асинхронно извън потребител или заявка от услуга към услуга.

Стъпка 1:

Създайте опашка със задачи, за да се справите със задачите. Тук използваме файла queue.yaml, за да посочим конфигурацията на опашката, която да бъде създадена в Google Cloud. Целевият параметър съдържа името на приложението, разгърнато на машината за приложения.

Стъпка 2:

Разположете файла queue.yaml в Google Cloud с помощта на командата gcloud app deploy queue.yaml Изображението по-долу е на опашка със задачи на Google, създадена в Google Cloud.

Стъпка 3:

Трябва да предадем маршрута на API и обекта на полезния товар за задачата. В примера по-долу ще предадем необходимите данни на функция initTask():

Стъпка 4:

Създайте функцията initTask():

Предаваме потребителското име на текущия потребител в полезния товар от съображения за удостоверяване. Сега, когато полезният товар е готов, предаваме всички необходими подробности на функцията за създаване на задачи

Стъпка 5:

Създайте метода create_task(). Този метод ще използва API на Google, за да създаде облачна задача и да я прехвърли към опашката със задачи. Файлът gAppCreds.json е Google Service Account, създаден за определяне на ролите на приложението.

Стъпка 6:

Сега създаваме API маршрутите с помощта на RouteServiceProvider в api.php:

Стъпка 7:

Сега създаваме TaskController, който ще насочва различните API към конкретната функция. Така че в примера по-долу създаваме функция associateApp():

В горната функция ние json_decode на полезния товар, който изпратихме в Стъпка 4, и го предаваме на съответното събитие за обработка. Потребителският идентификатор, който предадохме в Стъпка 4се използва за потвърждаване на автентичността на входящата заявка за API.

Окончателна присъда:

Обикновено в Laravel извикваме събитието директно от съответния контролер. Но за използване на облачни задачи на Google, ние създаваме Task API, който от своя страна извиква маршрута, който от своя страна извиква събитието, за да обработи нашите данни. Накратко, ние създаваме множество API за нашите събития и задания на Laravel, които след това се извикват (от API на Google Task) въз основа на маршрута, който преминавате в Стъпка 3 и Стъпка 6.

Тъй като използвам Google Cloud Tasks, не е нужно да се тревожа за супервайзора или управлението на заданията в таблицата на опашката, тъй като всичко се поема от Google Task Queue. Всичко, което трябва да направя, е да наблюдавам опашката със задачи, ако има неуспешна задача.

Използвайки Google Cloud API, мога да създам множество опашки за различни целеви приложения, които внедрявам в Google App Engine, независимо дали средата е стандартна или гъвкава.