Làm cách nào để chạy lịch trình trong php?
Lập lịch tác vụ song song cho PHP sử dụng MongoDB làm hàng đợi phân phối. Thực hiện các tác vụ song song một cách dễ dàng. Thư viện này có hỗ trợ tích hợp cho các hệ thống cụm và cpu đa lõi. Bạn có thể khởi động nhiều nút công nhân và chúng sẽ cân bằng tải các công việc có sẵn với nguyên tắc đến trước phục vụ trước. Mỗi nút cũng sẽ sinh ra một số tiến trình con có thể định cấu hình (động) để sử dụng tất cả các tài nguyên có sẵn. Hơn nữa, có thể lên lịch công việc vào những thời điểm nhất định, khoảng thời gian vô tận cũng như sắp xếp lại nếu công việc thất bại. Điều này mang đến một triển khai trong thế giới thực để quản lý quy trình song song cho PHP. Bạn cũng có thể đồng bộ hóa các tác vụ con và nhiều nội dung hay hơn nữa Show
Đặc trưng
v4Đây là tài liệu cho phiên bản chính v4 hiện tại. Bạn có thể xem hướng dẫn nâng cấp nếu muốn nâng cấp từ phiên bản v3 hoặc thậm chí là phiên bản cũ hơn. Tài liệu cho v3 có sẵn tại đây Mục lục
Tại sao?PHP không phải là ngôn ngữ đa luồng và nó cũng không thể xử lý (hầu hết) các tác vụ không đồng bộ. Chắc chắn có pthreads và pcntl nhưng chúng chỉ có thể sử dụng được trong chế độ cli (hoặc chỉ nên được sử dụng ở đó). Sử dụng thư viện này, bạn có thể viết các tác vụ có thể được thực thi song song bởi cùng một hệ thống hoặc bất kỳ hệ thống nào khác Nó hoạt động như thế nào (Làm ơn đi đường ngắn)?Một công việc được lên lịch thông qua bộ lập lịch tác vụ và được ghi vào hàng đợi tin nhắn trung tâm (MongoDB). Tất cả các nút Hàng đợi sẽ được thông báo trong thời gian thực (mềm) rằng có một công việc mới. Nút hàng đợi sẽ chuyển tiếp công việc thông qua hàng đợi tin nhắn systemv nội bộ tới trình quản lý công nhân. Người quản lý công nhân quyết định xem có cần tạo công nhân mới hay không. Cuối cùng, một công nhân sẽ thực hiện nhiệm vụ theo nguyên tắc đến trước phục vụ trước. Nếu không có chỗ trống nào, công việc sẽ đợi trong hàng đợi và được thực hiện ngay khi có chỗ trống. Một công việc có thể được lên lịch lại nếu nó thất bại. Có rất nhiều tính năng có sẵn, tiếp tục đọc Yêu cầu
Tải xuốngGói có sẵn tại packagist Để cài đặt gói thông qua trình soạn thảo thực thi
Nhật ký thay đổiMột thay đổi có sẵn ở đây Đóng gópChúng tôi rất vui vì bạn muốn đóng góp cho dự án này. Vui lòng làm theo các điều khoản nhất định Điều kiệnBạn có thể gặp các thuật ngữ sau trong readme này hoặc ở nơi khác TermClassDescriptionScheduler$mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);5Bộ lập lịch được sử dụng để thêm công việc, truy vấn công việc, xóa công việc và lắng nghe các sự kiện, nó là thành phần duy nhất bên cạnh các công việc (khác) thực sự được sử dụng trong ứng dụng chính của bạn. Công việc $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);6Việc triển khai công việc là nhiệm vụ thực tế mà bạn muốn thực hiện. Quy trình $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);7Bạn sẽ nhận được một quy trình sau khi thêm công việc, truy vấn công việc, v.v., quy trình về cơ bản là phần trên của quá trình thực hiện công việc của bạn. Nút hàng đợi $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);8Các nút hàng đợi xử lý các công việc có sẵn và chuyển tiếp chúng tới trình quản lý công nhân. Người quản lý công nhân $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);9Công việc của người quản lý công nhân là tạo ra những công nhân thực sự xử lý công việc. Ghi chú. Bản thân trình quản lý công nhân là một nhánh từ quy trình nút hàng đợi. Công nhân $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());0Công nhân là những người xử lý công việc từ hàng đợi và thực sự thực hiện công việc bạn đã gửi. Nhà máy công nhân $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());1Một nhà máy công nhân cần được bạn triển khai, nó sẽ tạo ra người quản lý công nhân và công nhân mới. Cluster-A cluster là một tập hợp nhiều nút xếp hàng. Một cụm không cần phải được cấu hình theo bất kỳ cách nào, bạn có thể bắt đầu bao nhiêu nút hàng đợi tùy thích Cài đặtNếu ứng dụng của bạn được tạo bằng bộ chứa docker, bạn phải sử dụng ít nhất các tùy chọn bản dựng sau ________số 8 Tài liệuĐể hiểu rõ hơn về cách thức hoạt động của thư viện này, chúng ta sẽ triển khai một công việc thư. Tất nhiên bạn có thể thực hiện bất kỳ loại công việc nào Tạo công việcViệc tạo một tác vụ khá dễ dàng, bạn chỉ cần triển khai TaskScheduler\JobInterface. Trong ví dụ này, chúng tôi sẽ triển khai một công việc có tên là MailJob để gửi thư bằng zend-mail
class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } } Khởi tạo bộ lập lịchBạn cần một phiên bản MongoDB\Database và một bộ ghi tương thích Psr\Log\LoggerInterface để khởi tạo bộ lập lịch $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger); công việc ống chỉBây giờ, hãy để chúng tôi tạo một thư và triển khai nó tới bộ lập lịch tác vụ mà chúng tôi đã khởi tạo ngay trước đó $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString()); Đây là toàn bộ điều kỳ diệu, bộ lập lịch của chúng tôi hiện đã có công việc đầu tiên, thật tuyệt vời thực hiện công việcNhưng bây giờ chúng ta cần thực thi các công việc đã xếp hàng đó. Tạo nhà máy công nhânBạn sẽ cần tạo nhà máy nút công nhân của riêng mình trong không gian tên ứng dụng được gọi để sinh ra các quy trình con mới. Nhà máy này được gọi trong khi một ngã ba mới được sinh ra. Điều này có nghĩa là nếu nó được gọi, bạn đang ở trong một quy trình mới và bạn sẽ cần khởi động lại ứng dụng của mình từ đầu (Hoặc chỉ những thứ bạn cần cho một nhân viên)
$mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);2 Đối với cả người quản lý công nhân và công nhân, một ngã ba mới có nghĩa là bạn sẽ cần phải khởi động lại lớp từ đầu
Để hiểu rõ hơn. nếu có một tệp cấu hình mà bạn đã lưu trữ các cấu hình của mình như một MongoDB uri, trong nhà máy, bạn sẽ cần phân tích lại cấu hình này và tạo một phiên bản mongodb mới. Hoặc bạn có thể đang sử dụng thùng chứa PSR-11, thùng chứa cần được tạo từ đầu trong nhà máy (Cây phụ thuộc mới). Bạn có thể chuyển một thể hiện của dic (tương thích với Psr\Container\ContainerInterface) làm đối số thứ năm cho TaskScheduler\Worker (hoặc tùy chọn trình quản lý worker nâng cao làm đối số thứ ba cho TaskScheduler\WorkerManager (Tùy chọn trình quản lý worker nâng cao). Xem thêm tại Sử dụng DIC) $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);3 Tạo nút hàng đợiHãy để chúng tôi viết một nút hàng đợi mới. Nút hàng đợi phải được bắt đầu như một quá trình riêng biệt. Bạn nên cung cấp một cách dễ dàng để bắt đầu các nút xếp hàng như vậy, có nhiều cách để đạt được điều này. Cách dễ nhất là chỉ tạo một tập lệnh php duy nhất có thể bắt đầu qua cli $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);4 Và sau đó bắt đầu phép thuật $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);5
Thư của chúng tôi được gửi ngay khi nút xếp hàng đang chạy và bắt đầu một số công nhân Thông thường, bạn muốn các nút đó luôn chạy. Chúng hoạt động giống như các nút thực thi vô hình đằng sau ứng dụng của bạn quản lý công việcNhận việcBạn có thể muốn truy xuất tất cả các công việc đã lên lịch $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);6 Theo mặc định, bạn sẽ nhận được tất cả các công việc có trạng thái
Bạn có thể chuyển một truy vấn tùy chọn để truy vấn các công việc cụ thể FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg0 Hủy công việcCó thể hủy các công việc đang chờ trong hàng đợi cũng như hủy các công việc đang thực sự chạy FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg1 Nếu bạn hủy một công việc với trạng thái ĐANG XỬ LÝ, công việc đó sẽ bị hủy và dữ liệu của tôi bị hỏng. Bạn đã được cảnh báo. (Điều này tương tự khi công việc kết thúc với trạng thái TIMEOUT). Sự khác biệt duy nhất là một công việc hết thời gian chờ sẽ được lên lịch lại nếu nó đã thử lại > 0 hoặc có một khoảng thời gian được định cấu hình. Một công việc bị hủy sẽ không được lên lịch lại. Bạn sẽ cần tạo một công việc mới theo cách thủ công cho công việc đó sửa đổi công việcKhông thể sửa đổi công việc đã lên lịch theo thiết kế. Bạn cần hủy công việc và thêm một công việc mới
tuôn ra hàng đợiMặc dù không thể sửa đổi/xóa công việc nhưng có thể xóa toàn bộ hàng đợi
FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg2 Xử lý công việc thất bạiMột công việc được xác nhận là thất bại nếu công việc đưa ra một ngoại lệ dưới bất kỳ hình thức nào. Nếu chúng tôi xem lại công việc thư của mình, nhưng lần này nó sẽ đưa ra một ngoại lệ FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg3 Điều này sẽ dẫn đến một công việc KHÔNG THÀNH CÔNG ngay sau khi công việc này được thực thi
Bộ lập lịch có xử lý tích hợp các công việc không thành công. Bạn có thể chỉ định tự động lên lịch lại một công việc nếu nó không thành công. Phần sau đây sẽ lên lịch lại công việc tối đa 5 lần (Nếu nó kết thúc với trạng thái FAILED) với khoảng thời gian là 30 giây FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg4 Điều này sẽ xếp hàng thư của chúng tôi để được thực thi sau một giờ kể từ bây giờ và nó sẽ lên lịch lại công việc tối đa ba lần nếu nó không thành công trong khoảng thời gian một phút Ping còn sống và tiến độ công việcTaskScheduler có hỗ trợ tích hợp để cập nhật tiến độ công việc từ quá trình thực hiện công việc của bạn. Theo mặc định, một công việc bắt đầu từ $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 (%) và kết thúc với tiến độ $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());6 (%). Lưu ý rằng tiến độ là số nổi. Bạn có thể tăng tiến độ đạt được trong công việc của mình Quan trọng. Lưu ý rằng theo mặc định, bộ lập lịch sẽ nhận một công việc sau 30 giây là mồ côi và lên lịch lại cho nó. Bạn có thể thay đổi số 30 trên toàn cầu trong quá trình khởi tạo Trình lập lịch biểu hoặc tiếp tục gọi $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());7 trong quá trình thực hiện tác vụ của mình. Việc gọi $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());8 có hoặc không có tiến trình hoạt động giống như một lệnh ping duy trì hoạt động cho bộ lập lịch và sẽ được gọi trong tác vụ của bạn nếu đó là một tác vụ chạy dài có chứa một vòng lặp. Nếu không có vòng lặp, bạn vẫn nên gọi phương thức này theo một số dạng khoảng thời gian để giữ cho tác vụ của bạn tồn tại. Không cần đặt tiến trình dưới dạng giá trị phần trăm, nếu không đặt, tác vụ sẽ tiếp tục ở mức 0% và đặt thành 100% nếu hoàn thành Chúng ta hãy xem nó hoạt động như thế nào với công việc sao chép tệp từ a sang b FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg5 Tiến trình hiện tại có thể có sẵn bằng cách sử dụng giao diện quy trình FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg6
Lập trình không đồng bộHãy xem ví dụ này FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg7 Điều này sẽ buộc main() (Quy trình của bạn) đợi cho đến khi tác vụ $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);20 được thực thi. (Hoặc với trạng thái XONG, KHÔNG ĐẠT, ĐÃ HỦY, HẾT THỜI GIAN) Đây là ví dụ phức tạp hơn FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg8 Điều này sẽ đợi cả ba công việc hoàn thành trước khi tiếp tục Lưu ý quan trọng. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg9 Bạn cũng có thể chặn thời gian chờ nếu bất kỳ quy trình nào dẫn đến ngoại lệ class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }0 Lắng nghe các sự kiệnBạn có thể liên kết với bộ lập lịch và lắng nghe mọi thay đổi và thực hiện công việc. ) class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }1 Cũng có thể lọc các sự kiện như vậy, ví dụ này sẽ chỉ được thông báo cho các sự kiện xảy ra trong một công việc cụ thể class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }2
sự kiện ràng buộcBên cạnh phương thức nghe đơn giản cho Trình lập lịch biểu, bạn có thể liên kết các trình nghe sự kiện với $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);8 và/hoặc ________ 15 của mình Ví dụ class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }3
Bạn có thể liên kết người nghe với cùng một sự kiện trong các nút hàng đợi của mình class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }4
Sự kiệnBạn có thể ràng buộc cho các sự kiện sau ShortFullScopeDescription$mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);26 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);27globalTriggers after a new job got added $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);28 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);29globalTriggers after a job has been postponed $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);30 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);31globalTriggers after a job started to execute $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);32 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);33globalTriggers after a job finished successfully $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);34 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);35globalTriggers after a job failed $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);36 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);37globalTriggers after a job timed out $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);38 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);39globalTriggers after a job has been canceled $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);40 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);41queue node onlyTriggers after a queue node spawned a new worker $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);42 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);43queue node Trình phát sự kiện tùy chỉnhVề cơ bản, cả $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);8 và $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);5 đều sử dụng $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);46 làm bộ phát sự kiện. Bạn có thể tạo cả hai phiên bản với phiên bản Trình tổ chức sự kiện giải đấu của riêng bạn class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }5 Tùy chọn công việc nâng caoTrình lập lịch tác vụ \ Trình lập lịch. addJob()/TaskScheduler\Scheduler. addJobOnce() cũng chấp nhận tùy chọn thứ ba (tùy chọn) cho phép bạn đặt các tùy chọn nâng cao hơn cho công việc $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);47 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5intChấp nhận thời gian unix cụ thể cho phép bạn chỉ định thời gian thực hiện công việc. Mặc định (0) là ngay lập tức hoặc tốt hơn là nói ngay khi có một vị trí miễn phí. $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);49 ________ 65in Bạn có thể chỉ định khoảng thời gian công việc (tính bằng giây) hữu ích cho các công việc cần được thực hiện trong một khoảng thời gian cụ thể, ví dụ: dọn dẹp thư mục tạm thời. Giá trị mặc định là $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 có nghĩa là không có khoảng thời gian nào cả, $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);52 có nghĩa là thực hiện lại công việc ngay lập tức (Nhưng hãy cẩn thận với $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);52, điều này có thể dẫn đến việc sử dụng nhiều cpu tùy thuộc vào công việc bạn đang thực hiện). Định cấu hình $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);54 có nghĩa là công việc sẽ được thực hiện hàng giờ. $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);55 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);56chuỗi Bạn có thể chỉ định nếu khoảng thời gian đề cập đến $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);57 hoặc $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);56 của công việc trước đó. Giá trị mặc định là $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);56 có nghĩa là khoảng thời gian đề cập đến thời gian kết thúc của công việc trước đó. Khi bạn xác định $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);57, khoảng thời gian đề cập đến thời gian bắt đầu của công việc trước đó. Điều này có thể hữu ích khi một công việc phải chạy vào những thời điểm cụ thể. $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);61 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5intChỉ định khoảng thời gian thử lại nếu công việc không thực thi được. Giá trị mặc định là $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 có nghĩa là không thử lại. Ví dụ như $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);64 có nghĩa là 2 lần thử lại. Bạn có thể đặt $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);52 để thử lại vô tận. $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);66 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);67int Tùy chọn này chỉ định thời gian (tính bằng giây) giữa các lần thử lại công việc. Mặc định là $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);67 tức là 5 phút. Hãy cẩn thận với tùy chọn này trong khi $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);66 là $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);52, bạn có thể kết thúc bằng một vòng lặp thất bại. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg01 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());3boolBạn có thể chỉ định $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());2 cho tùy chọn này để tạo ra một công nhân mới chỉ cho nhiệm vụ này. Ghi chú. Tùy chọn này bỏ qua giá trị max_children của $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);9, nghĩa là nhân viên này luôn được sinh ra. Nó hoàn toàn hợp lý đối với các công việc thực hiện các cuộc gọi chặn, ví dụ như một trình nghe lắng nghe các thay đổi của hệ thống tệp cục bộ (inotify). Một công việc với tùy chọn được bật này sẽ chỉ tiêu tốn ít cpu/bộ nhớ nhất có thể. $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);36 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5intChỉ định thời gian chờ tính bằng giây sẽ chấm dứt công việc sau khi hết thời gian nhất định bằng vũ lực. $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 mặc định có nghĩa là không có thời gian chờ nào cả. Công việc hết thời gian chờ sẽ được lên lịch lại nếu thử lại không phải là $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 và sẽ được đánh dấu là đã hết thời gian chờ. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg09 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg10 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg11Chỉ định id công việc theo cách thủ công. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg12 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());3boolChỉ hữu ích nếu được đặt trong lệnh gọi addJobOnce(). Nếu $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());2 bộ lập lịch không so sánh dữ liệu công việc để quyết định xem công việc có cần được lên lịch lại hay không
Hãy để chúng tôi thêm lại ví dụ về công việc thư của chúng tôi với một số tùy chọn tùy chỉnh
class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }6 Điều này sẽ xếp hàng thư của chúng tôi để được thực thi sau một giờ kể từ bây giờ và nó sẽ lên lịch lại công việc tối đa ba lần nếu nó không thành công trong khoảng thời gian một phút Thêm công việc nếu chưa cóNhững gì bạn cũng có thể làm là chỉ thêm công việc nếu nó chưa được xếp hàng đợi. Thay vì sử dụng FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg15, bạn có thể sử dụng FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg16, bộ lập lịch sau đó sẽ xác minh xem nó có cùng một công việc đã được xếp hàng chưa. Nếu không, công việc sẽ được thêm vào. Bộ lập lịch so sánh loại công việc ( FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg17 trong trường hợp này) và dữ liệu được gửi ( FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg18 trong trường hợp này)
class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }7 Theo mặc định, FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg19 không so sánh lớp công việc, dữ liệu đã gửi và trạng thái quy trình (ĐANG XỬ LÝ, CHỜ ĐỢI hoặc ĐÃ HOÃN). Nếu bạn không muốn kiểm tra dữ liệu, bạn có thể đặt FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg20 thành $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());2. Điều này sẽ yêu cầu bộ lập lịch chỉ lên lịch lại công việc của lớp đã cho nếu dữ liệu thay đổi. Điều này khá hữu ích nếu một công việc của lớp nhất định chỉ được xếp hàng một lần
class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }8 Nếu max_age thay đổi, công việc cũ sẽ bị hủy và công việc mới sẽ được xếp vào hàng đợi. Nếu FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg20 không được đặt ở đây, chúng tôi sẽ kết thúc với hai công việc thuộc loại FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg23 class MailJob extends TaskScheduler\AbstractJob { /** * {@inheritdoc} */ public function start(): bool { $transport = new Zend\Mail\Transport\Sendmail(); $mail = Message::fromString($this->data); $this->transport->send($mail); return true; } }9 Tất nhiên, cũng có thể truy vấn công việc đó theo cách thủ công, hủy bỏ và lên lịch lại. Điều này sẽ đạt được như trên $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);0 Tùy chọn lập lịch trình nâng caoBạn có thể đặt các tùy chọn công việc đó làm mặc định chung cho toàn bộ lịch biểu. Các tùy chọn và giá trị mặc định tùy chỉnh có thể được đặt cho các công việc trong quá trình khởi tạo hoặc bằng cách gọi Trình lập lịch biểu. setOptions() $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);1 Bạn cũng có thể thay đổi các tùy chọn đó sau đó $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);2 NameDefaultTypeDescription____824 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg25stringBộ sưu tập MongoDB hoạt động như hàng đợi thông báo công việc. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg26______827intKích thước tối đa tính bằng byte của bộ sưu tập công việc, nếu đạt đến công việc đầu tiên sẽ bị ghi đè bởi công việc mới. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg28 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg29stringBộ sưu tập MongoDB hoạt động như hàng đợi thông báo sự kiện. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg30 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg31intKích thước tối đa tính bằng byte của bộ sưu tập sự kiện, nếu đạt đến thì sự kiện đầu tiên sẽ bị ghi đè bởi sự kiện mới. Giá trị này thường phải lớn hơn 5 lần so với giá trị của FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg26 vì một công việc có thể có nhiều sự kiện hơn. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg33 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg10?intXác định thời gian thực hiện mặc định cho tất cả các công việc. Điều này chỉ liên quan đến các công việc mới được thêm vào. Mặc định là ngay lập tức hoặc tốt hơn là nói ngay khi có một vị trí miễn phí. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg35 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5intXác định khoảng thời gian mặc định cho tất cả các công việc. Điều này chỉ liên quan đến các công việc mới được thêm vào. Giá trị mặc định là $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5 có nghĩa là không có khoảng thời gian nào cả. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg38 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);56stringXác định xem khoảng thời gian đề cập đến $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);57 hay $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);56 của công việc trước đó. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg42 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5intXác định khoảng thời gian thử lại mặc định cho tất cả các công việc. Điều này chỉ liên quan đến các công việc mới được thêm vào. Không có thử lại theo mặc định cho các công việc không thành công. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg44 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);67intTùy chọn này chỉ định thời gian (tính bằng giây) giữa các lần thử lại công việc. Điều này chỉ liên quan đến các công việc mới được thêm vào. Mặc định là $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);67 tức là 5 phút. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg47 $mail = new Message(); $mail->setSubject('Hello...'); $mail->setBody('World'); $mail->setFrom('root@localhost', 'root'); $scheduler->addJob(MailJob::class, $mail->toString());5intChỉ định thời gian chờ mặc định cho tất cả các công việc. Điều này chỉ liên quan đến các công việc mới được thêm vào. Theo mặc định, không có thời gian chờ nào cả
Tùy chọn quản lý công nhân nâng caoMặc dù bạn đã biết rằng bạn cần một nhà máy công nhân để sinh ra trình quản lý công nhân, nhưng bạn có thể chỉ định các tùy chọn nâng cao cho nó. Đây là nhà máy công nhân của chúng tôi một lần nữa, nhưng lần này chúng tôi chỉ định thêm một số tùy chọn $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);3 Xử lý công nhân được thực hiện bằng cách chỉ định tùy chọn FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg49 trong khi công nhân sinh sản động là chế độ mặc địnhNameDefaultTypeDescription____849 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg51stringBạn có thể thay đổi cách thức xử lý fork được thực hiện. Có ba chế độ. động, tĩnh, theo yêu cầu. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg52 FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg53intSố tiến trình con tối thiểu. FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg54 $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);64intSố tiến trình con tối đa Chế độ quản lý quy trình ( FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg49)
Mặc định là FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg51. Thông thường FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg51 có ý nghĩa. Bạn có thể cần FROM php:7.4 RUN docker-php-ext-install pcntl sysvmsg RUN pecl install mongodb && docker-php-ext-enable mongodb pcntl sysvmsg59 trong thế giới được cung cấp vùng chứa trong khi số nút hàng đợi được xác định từ số lượng công việc chưa xử lý. Ví dụ: bạn có thể đang sử dụng Kubernetes autoscaling
Sử dụng PSR-11 DICTheo tùy chọn, người ta có thể chuyển Psr\Container\ContainerInterface cho các nút worker, sau đó được gọi để tạo các thể hiện công việc. Có thể bạn đã hiểu rồi, nhưng đây lại là nhà máy của công nhân. Lần này, nó chuyển một thể hiện của bộ chứa PSR-11 tới các nút worker. Và nếu bạn đã sử dụng một vùng chứa thì hoàn toàn hợp lý khi yêu cầu người quản lý từ vùng chứa đó. (Tất nhiên, bạn cũng có thể yêu cầu một phiên bản worker từ nó nếu việc triển khai bộ chứa của bạn hỗ trợ các tham số trong thời gian chạy (Id worker). Ghi chú. Đây sẽ là một triển khai bộ chứa không tương thích từ thông số kỹ thuật PSR-11. ) $mongodb = new MongoDB\Client('mongodb://localhost:27017'); $logger = new \A\Psr4\Compatible\Logger(); $scheduler = new TaskScheduler\Scheduler($mongodb->mydb, $logger);4 xử lý tín hiệuTất nhiên là có thể chấm dứt các nút hàng đợi. Họ thậm chí còn quản lý để sắp xếp lại các công việc đang chạy. Bạn chỉ cần gửi SIGTERM cho quy trình. Sau đó, nút hàng đợi sẽ truyền điều này đến trình quản lý công nhân trong khi trình quản lý công nhân sẽ gửi nó cho tất cả các công nhân đang chạy và họ sẽ lưu trạng thái của mình và thoát ra một cách dễ dàng. Một worker cũng lưu trạng thái của nó nếu worker process trực tiếp nhận được một SIGTERM. Nếu SIGKILL được sử dụng để chấm dứt nút hàng đợi (hoặc công nhân), trạng thái không thể được lưu và bạn có thể nhận các công việc zombie (Công việc có trạng thái XỬ LÝ nhưng không có công nhân nào thực sự xử lý các công việc đó). Không quản trị viên hệ thống tốt nào sẽ chấm dứt các công việc đang chạy bằng cách sử dụng SIGKILL, điều này không được chấp nhận và chỉ có thể được sử dụng nếu bạn biết mình đang làm gì Bạn cũng nên tránh sử dụng các hàm chặn không bao giờ kết thúc trong công việc của mình, php không thể xử lý các tín hiệu nếu bạn làm điều đó Làm cách nào để sử dụng lịch biểu trong php?php'; . định cấu hình các công việc đã lên lịch (xem bên dưới). // Để bộ lập lịch thực hiện các công việc đến hạn. $scheduler->run();
Làm cách nào để chạy một công việc định kỳ trong php?Thời gian - đặt ngày trong tuần, tháng, ngày, giờ và phút. Thực thi – công việc định kỳ cần được gọi bằng PHP để chạy – công việc đó nằm ở đường dẫn /usr/bin/php. Script Path – đường dẫn của file bạn muốn chạy. Đầu ra – bạn được phép thêm đầu ra cron vào một tệp hoặc loại bỏ nó. /dev/null 2>&1 sẽ loại bỏ
Làm cách nào để chạy tập lệnh php cứ sau 5 phút?hãy thử giải pháp này. ? php $interval=5; . |