Queuety
Работен процес с машина WordPress.
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activateПоследна версия v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+
use Queuety\Queuety;
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::dispatch( 'send_email', [
'to' => 'user@example.com',
'subject' => 'Welcome',
'body' => 'Hello from Queuety!',
] );На практика
Работен процес, дефиниран в PHP, и командата за работник, която го изпълнява.
Работен процес за одобрение
Работният процес изпълнява стъпка, изчаква 24 часа, след което спира на wait_for_approval(), докато друг процес не изпрати сигнала approval.
Забавянето се съхранява в базата данни, така че се запазва при рестартиране на работниците и внедряване на нови версии. Изпратеният предварително сигнал се записва и получава, когато работният процес стигне до изчакването. Отмяната на изпълнението извиква обработчика on_cancel().
$workflow_id = Queuety::workflow( 'approval_flow' )
->then( SubmitRequestHandler::class )
->delay( hours: 24 )
->wait_for_approval()
->then( ProcessApprovalHandler::class )
->on_cancel( CleanupHandler::class )
->dispatch( [ 'request_id' => 99 ] );
// Later, from another process:
Queuety::signal( $workflow_id, 'approval', [ 'approved_by' => 'admin@example.com' ] );# Single worker on default queue
wp queuety work
# Process a specific queue
wp queuety work --queue=emails
# Process multiple queues in priority order
wp queuety work --queue=critical,default,low
# One-shot mode
wp queuety work --once
# Multi-worker mode
wp queuety work --workers=4
# Adaptive worker pool
wp queuety work --queue=providers --min-workers=2 --max-workers=6Директно получаване на заявки MySQL
Всеки работник работи в дълготраен процес WP-CLI и получава задачи директно от MySQL с FOR UPDATE SKIP LOCKED.
Надеждни работни процеси
Многоетапни процеси с устойчиво състояние, което преживява изтичане на време PHP, сривове и повторни опити.
Машини на състоянията
Дълготрайно състояние, задвижвано от събития, с Queuety::machine(): дефинирайте състояния и преходи, изпращайте събития и преглеждайте хронологията.
Сигнали и одобрения
wait_for_signal(), wait_for_approval() и wait_for_input() поставят работния процес на пауза до получаване на външна информация.
Нива на приоритет
Четири нива от нисък до спешен. В рамките на една опашка задачите с по-висок приоритет се получават първи.
Ограничаване на честотата
Ограничения за всеки обработчик в плъзгащ се времеви прозорец. Работник, който получи задача с ограничена честота, я връща и изчаква.
Повтарящи се задачи
Планиране по интервал и въз основа на cron. Вграден парсер за cron без външни зависимости.
Паралелни стъпки
Изпълнявайте стъпките на работния процес едновременно и изчакайте завършването на всички, преди да продължите.
Метрики и журнал
Постоянен журнал в базата данни с пропускателна способност, средна продължителност и p95, както и честота на грешки за всеки обработчик.
Резервен механизъм WP-Cron
Без достъп до обвивката, събитие cron WordPress, изпълнявано веднъж в минута, стартира еднократен работник за опашката по подразбиране.
Междинен софтуер
Междинен софтуер за задачи с onion модел, който осигурява ограничаване на честотата, ограничаване на изключенията, уникалност, времеви ограничения и защита от припокриване.
PHP 8.2+
Перечислими типове, класове readonly, изрази match, промотиране на конструктора и атрибути PHP.
Защо Queuety
Състоянието се съхранява в MySQL
Редовете на опашката, състоянието на работния процес, журналите, сигналите и поточно предаваните части се съхраняват в MySQL, така че рестартирането на работник не води до загуба на състоянието на оркестрацията. На границата между стъпките актуализацията на състоянието, завършването на задачата и добавянето на следващата задача към опашката се потвърждават в една транзакция.
Извън заявката за страницата
WP-Cron се изпълнява само при посещения на страници, а 60-секунден LLM извикващ процес бива прекратен от изчакване PHP след 30 секунди. Работниците Queuety се изпълняват в дълготраен процес WP-CLI и поемат задачи, без да чакат трафик.
Ограничения за изпълненията на агенти
for_each() с режим на кворум, прагове за одобрение и ограничения като max_transitions() и max_state_bytes() държат дългите изпълнения на агенти в определени граници.
Работи и извън WordPress
Ядрото, базирано на база данни, работи във всеки процес PHP, който може да отвори същата база данни, така че друго приложение може да стартира задачи, да изпраща сигнали и да чете състоянието на работните процеси. Задействанията на действия, мостът WP-Cron и командите WP-CLI все още изискват WordPress.
Сравнение с
Как Queuety се вписва сред планировчиците и машините за работни процеси, познати на разработчиците на WordPress.
| Инструмент | Подходящ за | Разлики спрямо Queuety |
|---|---|---|
| WP-Cron | Подходящ заВграден е в WordPress и не изисква достъп до системния планировчик при споделен хостинг. Ако дадена задача пропусне планирания си час, тя се изпълнява при следващото зареждане на страница, вместо да бъде пропусната. | Разлики спрямо QueuetyРаботниците Queuety се изпълняват независимо от трафика на сайта и изискват дълготраен работен процес wp queuety work. Мостът WP-Cron превръща повтарящите се събития в графици, но все още не изпълнява свързаните с тях обратни извиквания на куки, така че WP-Cron продължава да отговаря за тях. |
| Action Scheduler | Подходящ заСъздаден е за разпространение в плъгини и теми без нужда от достъп до сървъра. Всеки месец обработва милиони плащания за абонаменти и уебхукове за WooCommerce, а всяко действие се записва в административен интерфейс. | Разлики спрямо QueuetyAction Scheduler изпълнява кука по-късно, например забавено do_action(). Queuety добавя многоетапни работни процеси със състояние, което се запазва между стъпките, изчаквания за сигнали и одобрения, както и машини на състоянията. Можете да ги проверявате с командите WP-CLI, например wp queuety workflow timeline. |
| Temporal | Подходящ заПлатформа за надеждно изпълнение: журналът на събитията записва всяка стъпка от работния процес, така че изпълнението продължава от последното записано събитие след срив или прекъсване. Temporal Cloud се предлага като алтернатива на самостоятелното хостване на услугата. | Разлики спрямо QueuetyTemporal Service представлява сървър на Go и база данни, работещи заедно с приложението ви. Queuety съхранява състоянието си в таблици MySQL във връзката с базата данни WordPress и изпълнява работниците чрез WP-CLI. |
Въпроси и отговори
Кратки отговори от документацията на Queuety.
Не и за прости задачи в опашката по подразбиране. Плъгинът стартира еднократен работник чрез WordPress cron всяка минута, докато WordPress cron се изпълнява, и обработва по една задача при всяко стартиране. За повтарящи се графици, персонализирани опашки и по-малко закъснение е необходим дълготраен работен процес wp queuety work.
Не. Необходим е или mysqli, или pdo_mysql, а при WordPress по подразбиране се избира mysqli. Задайте QUEUETY_DB_DRIVER на auto, mysqli или pdo, за да изберете драйвер принудително.
Задачите се получават чрез SELECT ... FOR UPDATE SKIP LOCKED, което се поддържа от MySQL от версия 8.0, а от MariaDB — от 10.6. CI на проекта се изпълнява с MySQL 8.0.
Да, ядрото, базирано на база данни: задачите, работниците, работните процеси, сигналите, машините на състоянията, артефактите, журналите, метриките и графиците работят с директна връзка Connection. За пуловете от работници са нужни и константите DB_HOST, DB_NAME, DB_USER и DB_PASSWORD. Queuety::on_action(), replace_wp_cron(), инициализацията на плъгина и командите wp queuety все още изискват WordPress.
Все още не. Queuety::replace_wp_cron() превръща повтарящите се събития wp_schedule_event() в графици Queuety, но все още не изпълнява свързаните с тях обратни извиквания на куки, затова запазете WP-Cron за събитията, които трябва да се изпълнят. Събитията от wp_schedule_single_event() остават към WP-Cron.
wp queuety work --workers=N стартира фиксиран пул и рестартира аварийно спрелите дъщерни процеси; необходими са разширенията pcntl и posix. --min-workers и --max-workers стартират адаптивен пул, който се разраства при натрупване на задачи и се свива, когато работата намалее.
Инсталирайте плъгина, стартирайте работник и следвайте ръководствата — от първата си задача до работни потоци за одобрение и машини на състоянията.