Hướng dẫn php artisan queue:work not working - hàng đợi nghệ nhân php: công việc không hoạt động
Câu trả lời được chấp nhận là một vấn đề đối với tôi, nhưng tôi cũng nói về câu hỏi này cho 2 vấn đề tương tự khác mà tôi đã giải quyết, và có lẽ họ sẽ giúp những người khác kết thúc ở đây. Show Vấn đề khác 1: Tạo công việc (nhà xây dựng) hoạt động, nhưng xử lý công việc không bắn - bao giờ.: job creation (constructor) works, but job handler does not fire - ever.
Vấn đề 2 khác: Tạo công việc (nhà xây dựng) hoạt động, nhưng đôi khi xử lý công việc không bắn - đôi khi.: job creation (constructor) works, but job handler does not fire - sometimes.
Giả sử tôi muốn công việc bị sa thải ngay cả trong một giao dịch, tôi có thể làm điều này:
Nhưng đừng làm điều này trừ khi bạn muốn sa thải công việc của mình và buộc phải quay lại. Tình huống của tôi là duy nhất ở chỗ công việc của tôi gửi email về các lỗi gây tử vong, vì vậy tôi muốn nó bị bắn vì dù sao tôi cũng có lỗi phá vỡ quá trình (rollback sẽ xảy ra và không có kế hoạch do lỗi không bị bắt). unless you want to fire your job and force rollback. My situation is unique in that my job sends emails on FATAL errors, so I want it to fire because I have an error breaking the process anyway (rollback going to happen and is unplanned due to uncaught error). Đây là một tình huống khi bạn không muốn làm điều này:
Bạn nên cấu trúc công văn của bạn để xảy ra sau khi bạn quay lại hoặc cam kết. Tôi không có sự xa xỉ đó cho công việc của mình vì nó xảy ra khi tôi không thể dự đoán (một lỗi nghiêm trọng). Nhưng nếu bạn có quyền kiểm soát nó, như biết thanh toán của bạn thành công, hãy gửi đi sau khi bạn đã cam kết hoặc thoát khỏi tất cả các cấp độ giao dịch! Tôi không chắc chắn về hành vi kích hoạt một công việc trong khi giao dịch, và sau đó quay lại hoặc cam kết. Nó có thể được làm việc xung quanh nếu nó không hoạt động đúng bằng cách thêm độ trễ, nhưng điều đó có vẻ không đáng tin cậy (đoán thời gian chờ đợi) trừ khi đó là một sự chậm trễ đáng kể. Khởi động lại nhân viên hàng đợi của Laravel nên là một phần thiết yếu trong tập lệnh triển khai của bạn. Chạy lệnh đơn giản này nên thực hiện thủ thuật: php artisan queue:restart
Nó hoạt động bằng cách đặt khóa Nếu bạn đang sử dụng Laravel Forge, bạn sẽ dễ dàng truy cập thông tin về thời gian hoạt động của mỗi công nhân của bạn. Nếu bạn kiểm tra trạng thái của một công nhân sau khi nó được khởi động lại, bạn sẽ thấy một cái gì đó như thế này: worker-:worker-_00 RUNNING pid 75, uptime 0 days, 00:00:20 Điều này cho thấy quá trình là thương hiệu mới. Người quản lý quy trình của bạn vừa mới bắt đầu nó. Nếu công nhân không thoát sau khi khởi động lại tín hiệu và bạn đã kiểm tra trạng thái của nó, bạn sẽ tìm thấy thời gian hoạt động lâu hơn nhiều. Nếu đó là trường hợp, đây là một vài điều cần kiểm tra. Đảm bảo công nhân chạy ở chế độ daemonNếu bạn bắt đầu nhân viên của mình bằng cách sử dụng php artisan queue:restart
0 sẽ không có bất kỳ tác dụng nào.Cách duy nhất để khởi động lại quy trình người nghe là thủ công: supervisorctl restart worker-name:*
Đảm bảo lưu trữ bộ đệm được cấu hình chính xácMột điều khác để kiểm tra là cấu hình của cửa hàng bộ nhớ cache của bạn. Về cơ bản tất cả các trường hợp công nhân chạy ứng dụng của bạn nên có quyền truy cập vào cùng một cửa hàng bộ đệm. Tất cả đều cần có khả năng nhìn thấy giá trị của khóa bộ đệm Ngoài ra, nếu bạn đang sử dụng trình điều khiển bộ đệm tệp, hãy đảm bảo các quyền của thư mục php artisan queue:restart
2 được đặt chính xác để phiên bản chạy php artisan queue:restart
0 có thể ghi khóa bộ đệm và các phiên bản công nhân có thể đọc nó.sudo chown -R forge:forge storage/framework/cache
Chạy lệnh này sẽ đảm bảo rằng các tệp trong thư mục bộ đệm đều thuộc sở hữu của người dùng hệ thống php artisan queue:restart
4. Bây giờ nếu các quy trình công nhân của bạn được chạy bởi người dùng php artisan queue:restart
4, họ sẽ có quyền truy cập vào các tệp bộ đệm ngay cả khi lệnh khởi động lại được thực thi bởi người dùng hệ thống khác.Thay đổi tiền tố bộ đệmCảm ơn @Trevorgehman đã chia sẻ mẹo này. Nếu bạn thay đổi tiền tố bộ đệm, lệnh khởi động lại sẽ đặt khóa bộ đệm với tiền tố mới. Các công nhân hiện tại sẽ không thể phát hiện sự thay đổi tiền tố đó và sẽ tiếp tục kiểm tra khóa bộ đệm cũ. Nếu bạn sẽ thay đổi tiền tố bộ đệm, bạn sẽ phải khởi động lại công nhân theo cách thủ công sau khi thay đổi. supervisorctl restart worker-name:*
Nếu bạn muốn tìm hiểu thêm về hệ thống hàng đợi của Laravel, hãy đảm bảo kiểm tra hàng đợi Laravel hoạt động! Tôi đã đặt mọi thứ tôi biết về hệ thống hàng đợi ở định dạng ebook cùng với một số trường hợp sử dụng thực tế. Kiểm tra nó cho một khóa học sụp đổ, một cuốn sách nấu ăn, một hướng dẫn và một tài liệu tham khảo. Php Artisan xếp hàng là gì?Bạn cũng có thể chạy: Hàng đợi nghệ nhân php: công việc -trên. Điều này sẽ bắt đầu một ví dụ của ứng dụng, xử lý một công việc duy nhất và sau đó giết kịch bản.start an instance of the application, process a single job, and then kill the script.
Làm cách nào để chạy hàng đợi ở Laravel?3 bước dễ dàng để thực hiện hàng đợi Laravel.. Bước 1: Cấu hình hàng đợi.Laravel cho phép cơ sở định cấu hình hàng đợi với một số trình điều khiển như cơ sở dữ liệu, Beanstalkd, Redis, Amazon, IronMQ, v.v.. Bước 2: Tạo một mẫu email và gửi thư..... Bước 3: Kiểm tra..... Công việc điều phối/trì hoãn .. Làm cách nào để xử lý các công việc thất bại ở Laravel?Sau khi nhận được danh sách các công việc thất bại, bạn có thể thử lại tất cả các công việc trong một hàng đợi một lần nữa với các phương pháp sau:.. 2.1 Thử lại tất cả các công việc thất bại.Nếu bạn muốn đánh lại tất cả các công việc thất bại thì bạn có thể chạy lệnh sau: .... 2.2 Thử lại công việc thất bại với ID..... 2.3 Thử lại các công việc thất bại với nhiều ID .. Làm thế nào để tôi gọi một công việc ở Laravel?Mục lục.. Cài đặt Laravel và Cấu hình cơ bản .. Định cấu hình hàng đợi .. Tạo một lớp học có khả năng gửi thư .. Tạo một công việc hàng đợi .. Gọi công việc hàng đợi .. Kiểm tra hàng đợi công việc .. |