Việc làm php laravel
{tip} Laravel hiện cung cấp Horizon, một bảng điều khiển đẹp mắt và hệ thống cấu hình cho hàng đợi do Redis cung cấp của bạn. Kiểm tra tài liệu Horizon đầy đủ để biết thêm thông tin Show
Hàng đợi của Laravel cung cấp một API thống nhất trên nhiều phụ trợ hàng đợi khác nhau, chẳng hạn như Beanstalk, Amazon SQS, Redis hoặc thậm chí là cơ sở dữ liệu quan hệ. Hàng đợi cho phép bạn trì hoãn việc xử lý một tác vụ tốn thời gian, chẳng hạn như gửi email, cho đến một thời điểm sau đó. Việc trì hoãn các tác vụ tốn thời gian này sẽ tăng tốc đáng kể các yêu cầu web tới ứng dụng của bạn Tệp cấu hình hàng đợi được lưu trữ trong 3. Trong tệp này, bạn sẽ tìm thấy các cấu hình kết nối cho từng trình điều khiển hàng đợi đi kèm với khung, bao gồm cơ sở dữ liệu, Beanstalkd, Amazon SQS, Redis và trình điều khiển đồng bộ sẽ thực thi công việc ngay lập tức (để sử dụng cục bộ). Trình điều khiển hàng đợi 4 cũng được bao gồm để loại bỏ các công việc được xếp hàng đợiKết nối Vs. hàng đợiTrước khi bắt đầu với hàng đợi Laravel, điều quan trọng là phải hiểu sự khác biệt giữa "kết nối" và "hàng đợi". Trong tệp cấu hình 3 của bạn, có tùy chọn cấu hình 6. Tùy chọn này xác định một kết nối cụ thể tới dịch vụ phụ trợ, chẳng hạn như Amazon SQS, Beanstalk hoặc Redis. Tuy nhiên, bất kỳ kết nối hàng đợi cụ thể nào cũng có thể có nhiều "hàng đợi" có thể được coi là các ngăn xếp hoặc chồng công việc được xếp hàng khác nhauLưu ý rằng mỗi ví dụ cấu hình kết nối trong tệp cấu hình 7 chứa thuộc tính 7. Đây là hàng đợi mặc định mà các công việc sẽ được gửi đến khi chúng được gửi đến một kết nối nhất định. Nói cách khác, nếu bạn gửi một công việc mà không xác định rõ ràng công việc đó sẽ được gửi đến hàng đợi nào, thì công việc đó sẽ được đặt trên hàng đợi được xác định trong thuộc tính 7 của cấu hình kết nối
Một số ứng dụng có thể không cần đẩy công việc lên nhiều hàng đợi, thay vào đó, ưu tiên có một hàng đợi đơn giản. Tuy nhiên, đẩy công việc vào nhiều hàng đợi có thể đặc biệt hữu ích cho các ứng dụng muốn ưu tiên hoặc phân đoạn cách xử lý công việc, vì queue worker của Laravel cho phép bạn chỉ định hàng đợi nào nó sẽ xử lý theo mức độ ưu tiên. Ví dụ: nếu bạn đẩy công việc vào hàng đợi 0, bạn có thể chạy một công nhân mang lại cho họ mức độ ưu tiên xử lý cao hơn
Điều kiện tiên quyết của trình điều khiểncơ sở dữ liệuĐể sử dụng trình điều khiển hàng đợi 1, bạn sẽ cần một bảng cơ sở dữ liệu để giữ các công việc. Để tạo di chuyển tạo bảng này, hãy chạy lệnh Artisan 2. Khi quá trình di chuyển đã được tạo, bạn có thể di chuyển cơ sở dữ liệu của mình bằng lệnh 3làm lạiĐể sử dụng trình điều khiển hàng đợi 4, bạn nên định cấu hình kết nối cơ sở dữ liệu Redis trong tệp cấu hình 5 của mìnhNếu kết nối hàng đợi Redis của bạn sử dụng Cụm Redis, tên hàng đợi của bạn phải chứa một. Điều này là bắt buộc để đảm bảo tất cả các khóa Redis cho một hàng đợi nhất định được đặt vào cùng một vị trí băm Các điều kiện tiên quyết khác của trình điều khiểnCác phụ thuộc sau đây là cần thiết cho trình điều khiển hàng đợi được liệt kê -Amazon SQS. `aws/aws-sdk-php ~3. 0` - Cây đậu. `pda/pheanstalk ~3. 0` - Redis. `predis/predis ~1. 0` Tạo công việcTạo các lớp công việcTheo mặc định, tất cả các công việc có thể xếp hàng cho ứng dụng của bạn được lưu trữ trong thư mục 6. Nếu thư mục 6 không tồn tại, nó sẽ được tạo khi bạn chạy lệnh 8 Artisan. Bạn có thể tạo một queued job mới bằng Artisan CLI 8Lớp được tạo sẽ triển khai giao diện 9, cho Laravel biết rằng công việc sẽ được đẩy vào hàng đợi để chạy không đồng bộCấu trúc lớp họcCác lớp công việc rất đơn giản, thường chỉ chứa một phương thức 00 được gọi khi công việc được xử lý bởi hàng đợi. Để bắt đầu, chúng ta hãy xem một lớp công việc ví dụ. Trong ví dụ này, chúng tôi sẽ giả vờ rằng chúng tôi quản lý một dịch vụ xuất bản podcast và cần xử lý các tệp podcast đã tải lên trước khi chúng được xuất bản
Trong ví dụ này, lưu ý rằng chúng ta có thể chuyển trực tiếp một Eloquent model vào hàm tạo của queued job. Do đặc điểm 01 mà công việc đang sử dụng, các mô hình Eloquent sẽ được tuần tự hóa và hủy tuần tự hóa một cách duyên dáng khi công việc đang xử lý. Nếu queued job của bạn chấp nhận một Eloquent model trong hàm khởi tạo của nó, thì chỉ mã định danh cho model đó sẽ được tuần tự hóa vào queue. Khi công việc thực sự được xử lý, hệ thống xếp hàng sẽ tự động truy xuất lại phiên bản mô hình đầy đủ từ cơ sở dữ liệu. Tất cả đều hoàn toàn trong suốt đối với ứng dụng của bạn và ngăn chặn các sự cố có thể phát sinh từ việc tuần tự hóa các phiên bản mô hình Eloquent đầy đủPhương thức 00 được gọi khi công việc được xử lý bởi hàng đợi. Lưu ý rằng chúng tôi có thể gõ phụ thuộc gợi ý vào phương pháp 00 của công việc. Laravel service container tự động inject các phụ thuộc này
điều phối công việcKhi bạn đã viết lớp công việc của mình, bạn có thể gửi nó bằng cách sử dụng phương pháp 05 trên chính công việc đó. Các đối số được truyền cho phương thức 05 sẽ được trao cho hàm tạo của công việc________số 8Gửi hàng bị trì hoãnNếu bạn muốn trì hoãn việc thực hiện một queued job, bạn có thể sử dụng phương thức 07 khi gửi một job. Ví dụ: hãy chỉ định rằng một công việc sẽ không có sẵn để xử lý cho đến 10 phút sau khi nó được gửi đi 0
chuỗi công việcChuỗi công việc cho phép bạn chỉ định danh sách các công việc được xếp hàng đợi sẽ được chạy theo trình tự. Nếu một công việc trong chuỗi không thành công, các công việc còn lại sẽ không được chạy. Để thực hiện chuỗi công việc được xếp hàng đợi, bạn có thể sử dụng phương thức 08 trên bất kỳ công việc có thể gửi đi nào của mình 2Tùy chỉnh hàng đợi & kết nốiGửi đến một hàng đợi cụ thểBằng cách đẩy các công việc vào các hàng đợi khác nhau, bạn có thể "phân loại" các công việc được xếp hàng đợi của mình và thậm chí ưu tiên số lượng công nhân mà bạn chỉ định cho các hàng đợi khác nhau. Hãy nhớ rằng, điều này không đẩy các công việc đến các "kết nối" hàng đợi khác nhau như được xác định bởi tệp cấu hình hàng đợi của bạn, mà chỉ đẩy các hàng đợi cụ thể trong một kết nối duy nhất. Để chỉ định hàng đợi, hãy sử dụng phương pháp 09 khi gửi công việc 4Gửi đến một kết nối cụ thểNếu bạn đang làm việc với nhiều kết nối hàng đợi, bạn có thể chỉ định kết nối nào sẽ đẩy công việc tới. Để chỉ định kết nối, hãy sử dụng phương pháp 20 khi gửi công việc 6Tất nhiên, bạn có thể xâu chuỗi các phương thức 20 và 09 để chỉ định kết nối và hàng đợi cho một công việc 9Chỉ định số lần thử công việc tối đa/giá trị thời gian chờSố lần thử tối đaMột cách tiếp cận để chỉ định số lần tối đa một công việc có thể được thực hiện là thông qua công tắc 23 trên dòng lệnh Artisan 0Tuy nhiên, bạn có thể thực hiện một cách tiếp cận chi tiết hơn bằng cách xác định số lần thử tối đa trên chính lớp công việc đó. Nếu số lần thử tối đa được chỉ định trong công việc, thì nó sẽ được ưu tiên hơn giá trị được cung cấp trên dòng lệnh 1Nỗ lực dựa trên thời gianThay thế cho việc xác định số lần công việc có thể được thử trước khi thất bại, bạn có thể xác định thời gian mà công việc sẽ hết thời gian chờ. Điều này cho phép một công việc được thực hiện nhiều lần trong một khung thời gian nhất định. Để xác định thời gian mà một công việc sẽ hết thời gian chờ, hãy thêm một phương thức 24 vào lớp công việc của bạn 2
Hết giờ
Tương tự như vậy, số giây tối đa mà công việc có thể chạy có thể được chỉ định bằng cách sử dụng công tắc 28 trên dòng lệnh Artisan 3Tuy nhiên, bạn cũng có thể xác định số giây tối đa mà một công việc sẽ được phép chạy trên chính lớp công việc đó. Nếu thời gian chờ được chỉ định trong công việc, nó sẽ được ưu tiên hơn bất kỳ thời gian chờ nào được chỉ định trên dòng lệnh 4Giới hạn tỷ lệ
Nếu ứng dụng của bạn tương tác với Redis, bạn có thể điều chỉnh các công việc được xếp hàng đợi của mình theo thời gian hoặc đồng thời. Tính năng này có thể hỗ trợ khi các công việc được xếp hàng đợi của bạn đang tương tác với các API cũng bị giới hạn tốc độ. Ví dụ: sử dụng phương pháp 29, bạn có thể điều chỉnh một loại công việc nhất định để chỉ chạy 10 lần sau mỗi 60 giây. Nếu không thể lấy được khóa, thông thường bạn nên giải phóng công việc trở lại hàng đợi để có thể thử lại sau 5
Ngoài ra, bạn có thể chỉ định số lượng công nhân tối đa có thể đồng thời xử lý một công việc nhất định. Điều này có thể hữu ích khi một công việc trong hàng đợi đang sửa đổi một tài nguyên mà mỗi lần chỉ nên sửa đổi một công việc. Ví dụ: sử dụng phương pháp 41, bạn có thể giới hạn các công việc của một loại nhất định chỉ được xử lý bởi một công nhân tại một thời điểm 6
Xử lý lỗiNếu một ngoại lệ được đưa ra trong khi công việc đang được xử lý, công việc sẽ tự động được giải phóng trở lại hàng đợi để có thể thử lại. Công việc sẽ tiếp tục được giải phóng cho đến khi nó được thử với số lần tối đa mà ứng dụng của bạn cho phép. Số lần thử tối đa được xác định bởi công tắc 23 được sử dụng trên lệnh Artisan 43. Ngoài ra, số lần thử tối đa có thể được xác định trên chính lớp công việc. Thông tin thêm về cách chạy queue workerChạy công nhân xếp hàngLaravel bao gồm queue worker sẽ xử lý các công việc mới khi chúng được đẩy vào hàng đợi. Bạn có thể chạy worker bằng lệnh 43 Artisan. Lưu ý rằng một khi lệnh 43 đã bắt đầu, nó sẽ tiếp tục chạy cho đến khi bị dừng thủ công hoặc bạn đóng thiết bị đầu cuối của mình
Hãy nhớ rằng, nhân viên xếp hàng là các quy trình tồn tại lâu dài và lưu trữ trạng thái ứng dụng đã khởi động trong bộ nhớ. Do đó, họ sẽ không nhận thấy những thay đổi trong cơ sở mã của bạn sau khi chúng được bắt đầu. Vì vậy, trong quá trình triển khai của bạn, hãy đảm bảo Xử lý một công việc duy nhấtTùy chọn 47 có thể được sử dụng để hướng dẫn nhân viên chỉ xử lý một công việc duy nhất từ hàng đợi 7Chỉ định Kết nối & Hàng đợiBạn cũng có thể chỉ định kết nối hàng đợi nào mà nhân viên sẽ sử dụng. Tên kết nối được chuyển đến lệnh 48 phải tương ứng với một trong các kết nối được xác định trong tệp cấu hình 3 của bạn 8Bạn có thể tùy chỉnh trình xử lý hàng đợi của mình hơn nữa bằng cách chỉ xử lý các hàng đợi cụ thể cho một kết nối nhất định. Ví dụ: nếu tất cả email của bạn được xử lý trong hàng đợi 60 trên kết nối hàng đợi 4 của bạn, bạn có thể đưa ra lệnh sau để bắt đầu một nhân viên chỉ xử lý hàng đợi đó 9Cân nhắc tài nguyênDaemon queue worker không "khởi động lại" khung trước khi xử lý từng công việc. Do đó, bạn nên giải phóng mọi tài nguyên nặng sau mỗi công việc hoàn thành. Ví dụ: nếu bạn đang thực hiện thao tác hình ảnh với thư viện GD, bạn nên giải phóng bộ nhớ bằng 62 khi hoàn tấtƯu tiên hàng đợiĐôi khi bạn có thể muốn ưu tiên cách hàng đợi của mình được xử lý. Ví dụ: trong 3 của bạn, bạn có thể đặt 7 mặc định cho kết nối 4 của mình thành 66. Tuy nhiên, đôi khi bạn có thể muốn đẩy một công việc vào hàng đợi ưu tiên 0 như vậy 80Để bắt đầu một worker xác minh rằng tất cả các công việc trong hàng đợi của 0 đã được xử lý trước khi tiếp tục với bất kỳ công việc nào trên hàng đợi của 66, hãy chuyển một danh sách các tên hàng đợi được phân tách bằng dấu phẩy cho lệnh 48 81Công nhân xếp hàng & triển khaiVì trình xử lý hàng đợi là các quy trình tồn tại lâu dài, chúng sẽ không nhận các thay đổi đối với mã của bạn mà không được khởi động lại. Vì vậy, cách đơn giản nhất để triển khai một ứng dụng bằng queue worker là khởi động lại các worker trong quá trình triển khai của bạn. Bạn có thể khởi động lại tất cả các công nhân một cách duyên dáng bằng cách đưa ra lệnh 91Lệnh này sẽ hướng dẫn tất cả nhân viên xếp hàng "chết" một cách duyên dáng sau khi họ xử lý xong công việc hiện tại để không có công việc hiện có nào bị mất. Vì nhân viên xếp hàng sẽ chết khi lệnh 91 được thực thi, bạn nên chạy trình quản lý quy trình, chẳng hạn như để tự động khởi động lại nhân viên xếp hàng
Hết hạn Công việc & Thời gian chờhết hạn công việcTrong tệp cấu hình 3 của bạn, mỗi kết nối hàng đợi xác định một tùy chọn 94. Tùy chọn này chỉ định số giây kết nối hàng đợi sẽ đợi trước khi thử lại một công việc đang được xử lý. Ví dụ: nếu giá trị của 94 được đặt thành 96, công việc sẽ được giải phóng trở lại hàng đợi nếu nó đã được xử lý trong 90 giây mà không bị xóa. Thông thường, bạn nên đặt giá trị 94 thành số giây tối đa mà công việc của bạn cần một cách hợp lý để hoàn tất quá trình xử lý
Thời gian chờ của công nhânLệnh 43 Artisan hiển thị tùy chọn 28. Tùy chọn 28 chỉ định khoảng thời gian Laravel queue master process sẽ đợi trước khi kill một queue worker đang xử lý một job. Đôi khi, quy trình hàng đợi con có thể bị "đóng băng" vì nhiều lý do, chẳng hạn như lệnh gọi HTTP bên ngoài không phản hồi. Tùy chọn ________ 328 loại bỏ các quy trình bị đóng băng đã vượt quá giới hạn thời gian đã chỉ định 82Tùy chọn cấu hình 94 và tùy chọn 28 CLI khác nhau, nhưng hoạt động cùng nhau để đảm bảo rằng các công việc không bị mất và các công việc chỉ được xử lý thành công một lần
Thời gian ngủ của công nhânKhi các công việc có sẵn trên hàng đợi, worker sẽ tiếp tục xử lý các công việc mà không có độ trễ giữa các công việc đó. Tuy nhiên, tùy chọn 09 xác định thời gian công nhân sẽ "ngủ" nếu không có công việc mới. Trong khi ngủ, worker sẽ không xử lý bất kỳ công việc mới nào - các công việc sẽ được xử lý sau khi worker thức dậy lần nữa 83Cấu hình giám sátGiám sát cài đặtNgười giám sát là người giám sát quy trình cho hệ điều hành Linux và sẽ tự động khởi động lại quy trình 43 của bạn nếu nó không thành công. Để cài đặt Trình giám sát trên Ubuntu, bạn có thể sử dụng lệnh sau 84
Cấu hình giám sát viênCác tệp cấu hình giám sát thường được lưu trữ trong thư mục 11. Trong thư mục này, bạn có thể tạo bất kỳ số lượng tệp cấu hình nào hướng dẫn người giám sát cách giám sát các quy trình của bạn. Ví dụ: hãy tạo tệp 12 bắt đầu và theo dõi quy trình 43 85Trong ví dụ này, chỉ thị 14 sẽ hướng dẫn Người giám sát chạy 8 quy trình 43 và giám sát tất cả chúng, tự động khởi động lại chúng nếu chúng không thành công. Tất nhiên, bạn nên thay đổi phần 16 của chỉ thị 17 để phản ánh kết nối hàng đợi mong muốn của bạnNgười giám sát bắt đầuKhi tệp cấu hình đã được tạo, bạn có thể cập nhật cấu hình Người giám sát và bắt đầu các quy trình bằng cách sử dụng các lệnh sau 86Để biết thêm thông tin về Người giám sát, hãy tham khảo tài liệu Người giám sát Xử lý công việc thất bạiĐôi khi công việc xếp hàng đợi của bạn sẽ thất bại. Đừng lo lắng, không phải lúc nào mọi thứ cũng diễn ra theo kế hoạch. Laravel bao gồm một cách thuận tiện để chỉ định số lần tối đa một công việc nên được thực hiện. Sau khi một công việc vượt quá số lần thử này, nó sẽ được chèn vào bảng cơ sở dữ liệu 18. Để tạo di chuyển cho bảng 18, bạn có thể sử dụng lệnh 20 87Sau đó, khi chạy , bạn nên chỉ định số lần tối đa một công việc sẽ được thực hiện bằng cách sử dụng công tắc 23 trên lệnh 43. Nếu bạn không chỉ định giá trị cho tùy chọn 23, các công việc sẽ được thực hiện vô thời hạn 88Dọn dẹp sau khi thất bại công việcBạn có thể xác định một phương thức 24 trực tiếp trên lớp công việc của mình, cho phép bạn thực hiện dọn dẹp công việc cụ thể khi xảy ra lỗi. Đây là vị trí hoàn hảo để gửi cảnh báo cho người dùng của bạn hoặc hoàn nguyên bất kỳ hành động nào được thực hiện bởi công việc. 25 khiến công việc thất bại sẽ được chuyển sang phương thức 24 89Sự kiện Công việc Thất bạiNếu bạn muốn đăng ký một sự kiện sẽ được gọi khi một công việc thất bại, bạn có thể sử dụng phương pháp 27. Sự kiện này là một cơ hội tuyệt vời để thông báo cho nhóm của bạn qua email hoặc HipChat. Ví dụ: chúng tôi có thể đính kèm một cuộc gọi lại cho sự kiện này từ 28 được bao gồm trong Laravel 0Thử lại công việc thất bạiĐể xem tất cả các công việc thất bại đã được chèn vào bảng cơ sở dữ liệu 18 của bạn, bạn có thể sử dụng lệnh Artisan 30Lệnh 30 sẽ liệt kê ID công việc, kết nối, hàng đợi và thời gian lỗi. ID công việc có thể được sử dụng để thử lại công việc không thành công. Chẳng hạn, để thử lại một công việc không thành công có ID là 32, hãy đưa ra lệnh sauĐể thử lại tất cả các công việc không thành công của bạn, hãy thực hiện lệnh 33 và chuyển 34 làm IDNếu bạn muốn xóa một công việc không thành công, bạn có thể sử dụng lệnh 35Để xóa tất cả các công việc không thành công của bạn, bạn có thể sử dụng lệnh 36Sự kiện việc làmSử dụng các phương thức 37 và 38 trên mặt tiền 39, bạn có thể chỉ định các cuộc gọi lại sẽ được thực thi trước hoặc sau khi một công việc xếp hàng đợi được xử lý. Các cuộc gọi lại này là cơ hội tuyệt vời để thực hiện ghi nhật ký bổ sung hoặc thống kê gia tăng cho trang tổng quan. Thông thường, bạn nên gọi các phương thức này từ nhà cung cấp dịch vụ. Ví dụ: chúng tôi có thể sử dụng 28 đi kèm với Laravel 1Sử dụng phương thức 41 trên mặt tiền 39, bạn có thể chỉ định các lệnh gọi lại thực thi trước khi worker cố gắng tìm nạp một công việc từ hàng đợi. Ví dụ: bạn có thể đăng ký Đóng để khôi phục bất kỳ giao dịch nào bị bỏ ngỏ do một công việc không thành công trước đó |