bởi Errol Fernandes

Triển khai một ứng dụng Laravel trên Google App Engine là một nhiệm vụ khá dễ dàng nhờ tài liệu có sẵn. Nhưng việc thiết lập xử lý tác vụ không đồng bộ (Laravel Eventing) trên Google Cloud sao cho hiệu quả không hề đơn giản.
Một trong những cách chúng ta có thể thực hiện việc này là sử dụng tệp supervisord.conf để thiết lập Laravel queue:listen
chỉ huy. Nhưng điều này chỉ khả dụng cho Môi trường linh hoạt của Google App Engine. Vì vậy, nếu bạn cần một giải pháp cho Môi trường tiêu chuẩn của Google App Engine, thì bạn cần sử dụng Google Cloud Tasks để xử lý các công việc không đồng bộ.
Google Cloud Tasks là một dịch vụ được quản lý hoàn toàn cho phép bạn quản lý việc thực thi, gửi và phân phối một số lượng lớn các tác vụ được phân phối. Khi sử dụng Tác vụ trên đám mây, bạn có thể thực hiện công việc một cách không đồng bộ bên ngoài yêu cầu của người dùng hoặc dịch vụ với dịch vụ.
Bước 1:
Tạo một hàng đợi nhiệm vụ để xử lý các nhiệm vụ. Ở đây, chúng tôi sử dụng tệp queue.yaml để chỉ định cấu hình của hàng đợi sẽ được tạo trong Google Cloud. Tham số đích chứa tên của ứng dụng được triển khai trên công cụ ứng dụng.

Bước 2:
Triển khai tệp queue.yaml trong Google Cloud bằng lệnh gcloud app deploy queue.yaml
Hình ảnh bên dưới là hàng đợi Tác vụ của Google được tạo trong Google Cloud.

Bước 3:
Chúng tôi cần chuyển tuyến đường của API và đối tượng tải trọng cho tác vụ. Trong ví dụ dưới đây, chúng tôi sẽ chuyển dữ liệu cần thiết cho một initTask()
chức năng:

Bước 4:
Tạo hàm initTask():

Chúng tôi chuyển userID của người dùng hiện tại trong tải trọng vì lý do xác thực. Bây giờ tải trọng đã sẵn sàng, chúng tôi chuyển tất cả các chi tiết cần thiết cho chức năng trình tạo tác vụ
Bước 5:
Tạo phương thức create_task(). Phương pháp này sẽ sử dụng Google API để xây dựng Tác vụ trên đám mây và chuyển tác vụ đó vào hàng đợi tác vụ. Tệp gAppCreds.json là Tài khoản dịch vụ của Google được tạo để xác định vai trò của ứng dụng.

Bước 6:
Bây giờ chúng tôi tạo các tuyến API bằng cách sử dụng RouteServiceProvider trong api.php:

Bước 7:
Bây giờ chúng ta tạo một TaskController sẽ định tuyến API khác nhau tới chức năng cụ thể. Vì vậy, trong ví dụ dưới đây, chúng tôi tạo một associateApp()
chức năng:

Trong chức năng trên, chúng tôi json_decode tải trọng mà chúng tôi đã gửi Bước 4 và chuyển nó đến sự kiện tương ứng để xử lý. ID người dùng mà chúng tôi đã chuyển vào Bước 4 được sử dụng để xác thực tính xác thực của yêu cầu API đến.
Phán quyết cuối cùng:
Thông thường trong Laravel, chúng tôi gọi trực tiếp sự kiện từ bộ điều khiển tương ứng. Nhưng để sử dụng các tác vụ trên đám mây của Google, chúng tôi tạo một API tác vụ để lần lượt gọi tuyến đường gọi sự kiện để xử lý dữ liệu của chúng tôi. Vì vậy, tóm lại, chúng tôi tạo nhiều API cho các sự kiện và công việc Laravel của chúng tôi, sau đó được gọi là (bởi API tác vụ của Google) dựa trên tuyến đường mà bạn đi qua Bước 3 và Bước 6.
Vì đang dùng Google Cloud Tasks nên tôi không cần lo lắng về người giám sát hay quản lý các công việc trong bảng xếp hàng, vì mọi thứ đã có Google Task Queue lo liệu. Tất cả những gì tôi phải làm là theo dõi Hàng đợi tác vụ nếu có bất kỳ tác vụ nào bị lỗi.
Sử dụng Google Cloud API, tôi có thể tạo nhiều hàng đợi cho các ứng dụng mục tiêu khác nhau mà tôi triển khai trên Google App Engine bất kể môi trường là Tiêu chuẩn hay Linh hoạt.