Перейти до вмісту

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+

На практиці

Робочий процес, визначений у PHP, і команда обробника, що його запускає.

Робочий процес погодження

Робочий процес виконує крок, чекає 24 години, а потім призупиняється на wait_for_approval(), доки інший процес не надішле сигнал approval.

Затримка зберігається в базі даних, тож вона переживає перезапуски обробника й розгортання; ранній сигнал реєструється та обробляється, щойно робочий процес дійде до очікування. Скасування запуску викликає обробник on_cancel().

PHP
$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' ] );

Пряме отримання завдань 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

Якщо доступу до оболонки немає, подія WordPress cron, що запускається раз на хвилину, запускає одноразовий обробник для черги за замовчуванням.

Проміжне програмне забезпечення

Проміжне програмне забезпечення для завдань із послідовним ланцюжком обробки: обмеження частоти, стримування винятків, унікальність, тайм-аути та захист від одночасного виконання.

PHP 8.2+

Переліки, класи лише для читання, вирази match, автоматичне просування властивостей конструктора та атрибути PHP.

Чому Queuety

Стан зберігається в MySQL

Рядки черги, стан робочих процесів, журнали, сигнали й потокові фрагменти зберігаються в MySQL, тому після перезапуску обробника стан оркестрації не втрачається. На межі кожного кроку оновлення стану, завершення завдання та додавання наступного завдання фіксуються однією транзакцією.

Поза запитом сторінки

WP-Cron запускається лише під час відвідування сторінок, а 60-секундний виклик LLM переривається через 30-секундний тайм-аут PHP. Обробники 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 пропонується як альтернатива самостійному хостингу сервісу. Відмінність від QueuetyСервіс Temporal — це сервер Go та база даних, що працюють поруч із вашою програмою. Queuety зберігає стан у таблицях MySQL через підключення до бази даних WordPress, а обробники запускає за допомогою WP-CLI.

Запитання та відповіді

Короткі відповіді з документації Queuety.

Установіть плагін, запустіть обробник і перегляньте посібники: від першого завдання до робочих процесів погодження й автоматів станів.