PHP API
Allt i Queuety är tillgängligt via den statiska klassen Queuety\Queuety. Den är den enda ingångspunkten för att skicka jobb, bygga arbetsflöden, styra tillståndsmaskiner, hantera köer och komma åt interna delsystem.
use Queuety\Queuety;
Fristående åtkomst till kärnan
Queuetys databasbaserade körmiljö kan initieras utanför WordPress.
Den fristående lösningen gäller orkestreringskärnan:
- jobb och arbetare (arbetarpooler behöver också konstanterna
DB_HOST,DB_NAME,DB_USERochDB_PASSWORD, se nedan) - arbetsflöden och signaler
- tillståndsmaskiner och händelser
- artefakter, loggar, mätvärden och scheman
Det är ingen ersättning för adaptern WordPress. Queuety::on_action(),
replace_wp_cron(), insticksprogrammets uppstart och den riktiga registreringsvägen för wp queuety ...
kräver fortfarande WordPress.
Queuety::init( Connection $conn )
Initiera Queuety med en direkt databasbaserad anslutning.
use Queuety\Connection;
use Queuety\Queuety;
$conn = new Connection(
host: '127.0.0.1:3306',
dbname: 'wordpress',
user: 'root',
password: 'secret',
prefix: 'wp_',
);
Queuety::init( $conn );
Det valfria argumentet table_prefix ändrar Queuety-delen av körmiljöns
tabellnamn per anslutning:
$conn = new Connection(
host: '127.0.0.1:3306',
dbname: 'wordpress',
user: 'root',
password: 'secret',
prefix: 'wp_',
table_prefix: 'themequeue_',
);
Det gör att tabeller som queuety_jobs får namnet wp_themequeue_jobs.
Queuety::ensure_schema()
Se till att körmiljöns tabeller Queuety finns för den aktiva anslutningen.
Queuety::init( $conn );
Queuety::ensure_schema();
Se Användning fristående för hela modellen och gränsen för WordPress.
Jobb
Queuety::dispatch( $handler, $payload )
Skicka ett jobb. Godtar antingen en sträng med ett hanterarnamn eller en instans av Contracts\Job. Returnerar en PendingJob-byggare för att kedja ihop alternativ.
// Handler name + payload (original API)
Queuety::dispatch( 'send_email', [ 'to' => 'user@example.com' ] );
// Contracts\Job instance (v0.6.0+)
Queuety::dispatch( new SendEmailJob( to: 'user@example.com' ) );
// With options
Queuety::dispatch( 'send_email', [ 'to' => 'user@example.com' ] )
->on_queue( 'emails' )
->with_priority( Priority::High )
->delay( 300 )
->max_attempts( 5 )
->rate_limit( 10, 60 )
->unique()
->after( $other_job_id );
// Get the job ID
$job_id = Queuety::dispatch( 'send_email', $payload )->id();
När en instans av Contracts\Job skickas med hämtar serialiseraren FQCN som hanterarnamn och publika egenskaper som nyttolast. Parametern $payload ignoreras när $handler är en instans av Job.
PendingJob-metoder
| Metod | Beskrivning |
|---|---|
on_queue( string $queue ) |
Ange målkön |
with_priority( Priority $priority ) |
Ange prioritetsnivån |
delay( int $seconds ) |
Fördröjning innan jobbet blir tillgängligt |
max_attempts( int $max ) |
Maximalt antal omförsök |
rate_limit( int $max, int $window ) |
Hastighetsbegränsning: max antal körningar per tidsfönster i sekunder |
unique() |
Förhindra dubbla utskick |
after( int $job_id ) |
Vänta tills ett annat jobb har slutförts |
concurrency_group( string $group, int $limit ) |
Placera jobbet i en gemensam grupp för arbetarintag |
cost_units( int $units ) |
Lägg till metadata om relativ körkostnad för utskicket |
id() |
Tvinga igenom utskicket och returnera jobb-ID:t |
concurrency_group() och cost_units() ingår i den bredare modellen för Resurshantering. Därför kan samma utskick ingå i samtidighetsgränser baserade på antal, viktade kö- eller leverantörsbudgetar och heuristik för arbetarintag.
Queuety::dispatch_sync( $handler, $payload )
Kör ett jobb synkront i den aktuella processen utan att lägga det i kön.
// With a Job instance
Queuety::dispatch_sync( new SendEmailJob( to: 'user@example.com', subject: 'Hi', body: 'Hello' ) );
// With a handler name and payload
Queuety::dispatch_sync( 'send_email', [ 'to' => 'user@example.com' ] );
Jobbets metod handle() anropas direkt. Ingen databasrad skapas, ingen arbetare medverkar och ingen mellanprogramvara tillämpas.
Queuety::batch( $jobs )
Skicka flera jobb i en enda INSERT med flera rader.
$job_ids = Queuety::batch( [
[ 'handler' => 'send_email', 'payload' => [ 'to' => 'a@example.com' ], 'queue' => 'emails' ],
[ 'handler' => 'send_email', 'payload' => [ 'to' => 'b@example.com' ], 'priority' => 2 ],
] );
Queuety::create_batch( $jobs )
Skapa en BatchBuilder för att skicka en grupp jobb med återanrop och förloppsspårning. Se Batchhantering för fullständig information.
$batch = Queuety::create_batch( [
new ImportUsersJob( $chunk_1 ),
new ImportUsersJob( $chunk_2 ),
] )
->name( 'Import users' )
->then( ImportCompleteHandler::class )
->catch( ImportFailedHandler::class )
->finally( ImportCleanupHandler::class )
->allow_failures()
->on_queue( 'imports' )
->dispatch();
BatchBuilder-metoder
| Metod | Returnerar | Beskrivning |
|---|---|---|
name( string $name ) |
self |
Ange ett namn för batchen |
on_queue( string $queue ) |
self |
Ange kön för alla jobb i batchen |
then( string $handler_class ) |
self |
Hanterare som anropas när batchen slutförs utan fel |
catch( string $handler_class ) |
self |
Hanterare som anropas när det första jobbet i batchen misslyckas |
finally( string $handler_class ) |
self |
Hanterare som anropas när batchen avslutas (med eller utan fel) |
allow_failures() |
self |
Tillåt att återanropet then körs även om fel uppstått |
dispatch() |
Batch |
Skapa batchraden och alla jobb, returnerar värdeobjektet Batch |
Queuety::find_batch( $id )
Hitta en batch med dess ID. Returnerar ett Batch-värdeobjekt eller null.
$batch = Queuety::find_batch( $batch_id );
if ( null !== $batch ) {
echo $batch->progress() . '% complete';
}
Arbetarkontroll
Queuety::run_worker( $queue = 'default', $once = false )
Kör en arbetarloop direkt.
Queuety::run_worker( 'default' );
Queuety::run_worker( 'critical,default', true );
Queuety::run_worker_pool( $workers, $queue = 'default' )
Kör en arbetargrupp med fast storlek direkt. Kräver tilläggen pcntl och posix. Gruppen läser konstanterna WordPress, DB_HOST, DB_NAME, DB_USER och DB_PASSWORD för sina underordnade anslutningar (bara tabellprefixen hämtas från den initierade anslutningen). Definiera därför konstanterna när du kör en pool utanför WordPress (#5).
Queuety::run_worker_pool( 4, 'providers' );
Queuety::run_auto_scaling_worker_pool( $min_workers, $max_workers, $queue = 'default' )
Kör en adaptiv arbetargrupp direkt. Samma krav som för run_worker_pool().
Queuety::run_auto_scaling_worker_pool( 2, 6, 'providers' );
Batch-värdeobjekt
| Metod/egenskap | Typ | Beskrivning |
|---|---|---|
$id |
int |
Batch-ID |
$name |
string|null |
Valfritt batchnamn |
$total_jobs |
int |
Totalt antal jobb i batchen |
$pending_jobs |
int |
Jobb som fortfarande väntar |
$failed_jobs |
int |
Antal misslyckade jobb |
$failed_job_ids |
array |
ID:n för misslyckade jobb |
$created_at |
DateTimeImmutable |
När batchen skapades |
$finished_at |
DateTimeImmutable|null |
När batchen avslutades |
$cancelled_at |
DateTimeImmutable|null |
När batchen avbröts |
progress() |
int |
Slutförandegrad (0–100) |
finished() |
bool |
Om batchen har avslutats |
has_failures() |
bool |
Om något jobb misslyckades |
cancelled() |
bool |
Om batchen avbröts |
Queuety::chain( $jobs )
Skapa en ChainBuilder för sekventiell körning av jobb. Varje jobb är beroende av att det föregående slutförs utan fel.
$first_job_id = Queuety::chain( [
new FetchDataJob( $url ),
new ProcessDataJob(),
new NotifyCompleteJob(),
] )
->on_queue( 'pipeline' )
->catch( ChainFailedHandler::class )
->dispatch();
ChainBuilder-metoder
| Metod | Returnerar | Beskrivning |
|---|---|---|
on_queue( string $queue ) |
self |
Ange kön för alla jobb i kedjan |
catch( string $handler_class ) |
self |
Hanterare som anropas när ett jobb i kedjan blir permanent begravt |
dispatch() |
int |
Skapa alla jobb med sekventiella beroenden och returnera det första jobb-ID:t |
Queuety::retry( $job_id )
Försök köra ett specifikt jobb igen. Återställer det till statusen pending.
Queuety::retry( 42 );
Queuety::retry_buried()
Försök köra alla begravda jobb igen. Returnerar antalet jobb som försökts köras igen.
$count = Queuety::retry_buried();
Queuety::purge( $older_than_days )
Rensa slutförda jobb. Returnerar antalet jobb som rensades.
$count = Queuety::purge(); // uses QUEUETY_RETENTION_DAYS
$count = Queuety::purge( 30 ); // purge jobs older than 30 days
Köer
Queuety::stats( $queue )
Hämta antal jobb grupperade efter status.
$stats = Queuety::stats(); // all queues
$stats = Queuety::stats( 'emails' ); // specific queue
// ['pending' => 12, 'processing' => 3, 'completed' => 150, 'failed' => 2, 'buried' => 1]
Queuety::buried( $queue )
Hämta alla begravda jobb.
$jobs = Queuety::buried();
$jobs = Queuety::buried( 'emails' );
Queuety::pause( $queue )
Pausa en kö så att arbetarna hoppar över den.
Queuety::pause( 'emails' );
Queuety::resume( $queue )
Återuppta en pausad kö.
Queuety::resume( 'emails' );
Queuety::is_paused( $queue )
Kontrollera om en kö är pausad.
if ( Queuety::is_paused( 'emails' ) ) {
// Queue is paused
}
Arbetsflöden
Queuety::workflow( $name )
Börja bygga ett arbetsflöde. Returnerar en WorkflowBuilder.
$workflow_id = Queuety::workflow( 'generate_report' )
->then( FetchDataHandler::class )
->then( CallLLMHandler::class )
->then( FormatOutputHandler::class )
->dispatch( [ 'user_id' => 42 ] );
WorkflowBuilder-metoder
| Metod | Beskrivning |
|---|---|
then( string $handler_class, ?string $name = null ) |
Lägg till ett sekventiellt steg. Valfritt namn för villkorlig förgrening. |
parallel( array $handler_classes ) |
Lägg till en parallell steggrupp. |
for_each( string $items_key, string $handler_class, ?string $result_key = null, ForEachMode $mode = ForEachMode::All, ?int $quorum = null, ?string $reducer_class = null, ?string $name = null ) |
Lägg till ett dynamiskt for-each-steg som skapar ett grenjobb per objekt i arbetsflödets tillstånd. |
repeat_while( string $target_step, ?string $state_key = null, mixed $expected = true, ?string $name = null, ?string $condition_class = null, ?int $max_iterations = null ) |
Gå tillbaka till ett tidigare namngivet steg medan en publik tillståndsnyckel eller klassen RepeatCondition matchar. |
repeat_until( string $target_step, ?string $state_key = null, mixed $expected = true, ?string $name = null, ?string $condition_class = null, ?int $max_iterations = null ) |
Gå tillbaka till ett tidigare namngivet steg tills en publik tillståndsnyckel eller klassen RepeatCondition matchar. |
run_workflow( string $workflow_name, WorkflowBuilder $sub_builder ) |
Lägg till ett kör-arbetsflöde-steg. |
delay( int $seconds = 0, int $minutes = 0, int $hours = 0, int $days = 0 ) |
Lägg till ett beständigt fördröjningssteg. Alla varaktigheter summeras. |
wait_for_signal( string $name, ?string $result_key = null, ?string $step_name = null, array $match_payload = [], ?string $correlation_key = null ) |
Lägg till ett steg som väntar på en signal. Valfria match_payload och correlation_key gör att orelaterade händelser kan ignoreras. |
wait_for_signals( array $signal_names, WaitMode $mode = WaitMode::All, ?string $result_key = null, ?string $name = null, array $match_payload = [], ?string $correlation_key = null ) |
Vänta på alla eller valfria flera signaler, med valfri nyttolastmatchning och korrelation. |
wait_for_approval( string $signal_name = 'approval', ?string $result_key = 'approval', ?string $name = null, array $match_payload = [], ?string $correlation_key = null ) |
Vänta på en signal om mänskligt godkännande. |
wait_for_decision( string $approve_signal = 'approved', string $reject_signal = 'rejected', ?string $result_key = 'decision', ?string $name = null, array $match_payload = [], ?string $correlation_key = null ) |
Vänta på antingen godkännande eller avslag och lagra ett strukturerat beslutsvärde. |
wait_for_input( string $signal_name = 'input', ?string $result_key = 'input', ?string $name = null, array $match_payload = [], ?string $correlation_key = null ) |
Vänta på en signal med mänsklig inmatning. |
wait_for_workflow( int|string $workflow, ?string $result_key = null, ?string $name = null ) |
Vänta på att ett arbetsflödes-ID, eller ett arbetsflödes-ID lagrat i publikt tillstånd, ska slutföras. |
wait_for_workflows( array|string $workflows, WaitMode $mode = WaitMode::All, ?string $result_key = null, ?string $name = null, ?int $quorum = null ) |
Vänta på att alla, valfria eller ett kvorum av flera arbetsflöden ska slutföras. |
wait_for_workflow_group( string $group_key, WaitMode $mode = WaitMode::All, ?int $quorum = null, ?string $result_key = null, ?string $name = null ) |
Vänta på en tidigare startad arbetsflödesgrupp med dess interna gruppnyckel. |
start_workflows( string $items_key, WorkflowBuilder $workflow_builder, string $result_key = 'started_workflow_ids', string $payload_key = 'item', bool $inherit_state = true, ?string $name = null, ?string $group_key = null ) |
Skicka en arbetsflödesprocess på toppnivå per körningsobjekt och tagga vid behov den startade gruppen med en beständig gruppnyckel. |
start_agents( string $items_key, WorkflowBuilder $workflow_builder, string $result_key = 'agent_workflow_ids', string $payload_key = 'agent_task', bool $inherit_state = true, ?string $name = null, ?string $group_key = null ) |
Agentinriktat alias för start_workflows(). |
wait_for_agents( array|string $workflows = 'agent_workflow_ids', WaitMode $mode = WaitMode::All, ?string $result_key = 'agent_results', ?string $name = null, ?int $quorum = null ) |
Agentinriktat alias för wait_for_workflows(). |
wait_for_agent_group( string $group_key = 'agents', WaitMode $mode = WaitMode::All, ?int $quorum = null, ?string $result_key = 'agent_results', ?string $name = null ) |
Agentinriktat alias för wait_for_workflow_group(). |
version( string $version ) |
Tagga arbetsflödesdefinitionen med en version på applikationsnivå för inspektion och exporter. |
idempotency_key( string $key ) |
Gör utskick av arbetsflödet beständigt för en nyckel som anroparen anger. Ett nytt utskick med samma nyckel returnerar det ursprungliga arbetsflödes-ID:t. |
max_transitions( int $max ) |
Misslyckas arbetsflödet om fler än $max stegövergångar slutförs. |
max_for_each_items( int $max ) |
Misslyckas arbetsflödet om ett for_each()-steg försöker utöka sig till fler än $max objekt. |
max_state_bytes( int $bytes ) |
Misslyckas arbetsflödet om det publika tillståndet växer utöver $bytes. |
max_cost_units( int $max ) |
Misslyckas arbetsflödet om slutförda steg förbrukar mer än $max kostnadsenheter. |
max_started_workflows( int $max ) |
Misslyckas arbetsflödet innan fler än $max underordnade arbetsflöden skickas iväg. |
compensate_with( string $handler_class ) |
Koppla en kompensationshanterare till det senast tillagda steget. |
compensate_on_failure() |
Kör kompensationer för slutförda steg automatiskt när arbetsflödet misslyckas. |
on_queue( string $queue ) |
Ange kön för alla steg. |
with_priority( Priority $priority ) |
Ange prioriteten för alla steg. |
max_attempts( int $max ) |
Ange maximalt antal omförsök per steg. |
on_cancel( string $handler_class ) |
Registrera en klass för en rensningshanterare vid avbrytning. Se Avbrytning. |
prune_state_after( int $steps = 2 ) |
Aktivera automatisk rensning av tillstånd. Tar bort stegresultat som är äldre än tröskelvärdet. Se Rensning av tillstånd. |
must_complete_within( int $seconds = 0, int $minutes = 0, int $hours = 0, int $days = 0 ) |
Ange en tidsfrist för arbetsflödet. Alla tidslängder summeras. Se Tidsfrister. |
on_deadline( string $handler_class ) |
Registrera en hanterare som anropas när arbetsflödets tidsfrist överskrids. Se Tidsfrister. |
dispatch( array $initial_payload = [] ) |
Skicka iväg arbetsflödet. Returnerar arbetsflödets ID. |
Queuety::workflow_status( $workflow_id )
Hämta arbetsflödets status. Returnerar ett WorkflowState-objekt eller null.
$state = Queuety::workflow_status( $workflow_id );
echo $state->name; // 'generate_report'
echo $state->status->value; // 'running'
echo $state->current_step; // 1
echo $state->total_steps; // 3
print_r( $state->state ); // accumulated public state array
echo $state->wait_type; // 'signal' or 'workflow' while blocked
echo $state->wait_mode; // 'all', 'any', or 'quorum'
echo $state->definition_version; // 'research.v2'
echo $state->definition_hash; // '4c7a...'
echo $state->idempotency_key; // 'brief:42:research'
echo $state->artifact_count; // 2
print_r( $state->budget ); // configured workflow budget + current usage
print_r( $state->wait_details ); // matched/remaining blockers, result key, correlation info
print_r( $state->artifact_keys ); // ['draft', 'citations']
WorkflowState visar också:
waiting_for: signalnamnen eller arbetsflödes-ID:na som för närvarande blockerar körningencurrent_step_name: det konfigurerade namnet på det aktuella steget, om det finnswait_mode: det aktuella vänteläget (all,anyellerquorum) medan körningen är blockeradwait_details: extra inspektionsdata, till exempel matchade och återstående blockeraredefinition_version: värdet som angetts avversion(), om det finnsdefinition_hash: en deterministisk hash av arbetsflödesdefinitionenidempotency_key: den beständiga utskickningsnyckeln, om det finnsbudget: konfigurerade gränser plus aktuell användning, om skyddsräcken är aktiveradeartifact_count: antal lagrade artefakter för arbetsflödetartifact_keys: lagrade artefaktnycklar för snabb inspektion
Queuety::retry_workflow( $workflow_id )
Försök köra om ett misslyckat arbetsflöde från steget där det misslyckades.
Queuety::retry_workflow( $workflow_id );
Kastar RuntimeException om arbetsflödet redan har återställts efter ett fel.
Queuety::pause_workflow( $workflow_id )
Pausa ett arbetsflöde som körs. Arbeten för det aktuella steget som redan ligger i kö kan fortfarande slutföras, men senare steg läggs inte i kön förrän du återupptar arbetsflödet.
Queuety::pause_workflow( $workflow_id );
Queuety::resume_workflow( $workflow_id )
Återuppta ett pausat arbetsflöde.
Queuety::resume_workflow( $workflow_id );
Queuety::cancel_workflow( $workflow_id )
Avbryt ett arbetsflöde och kör eventuella registrerade rensningshanterare. Anger statusen till cancelled och begraver alla väntande och bearbetade jobb för arbetsflödet.
Queuety::cancel_workflow( $workflow_id );
Kastar RuntimeException om arbetsflödet redan är completed eller cancelled. Mer information finns i Avbrytande.
Queuety::rewind_workflow( $workflow_id, $to_step )
Spola tillbaka ett arbetsflöde till ett tidigare steg och kör det igen därifrån. Tillståndet återställs från händelseloggen state_after för det angivna steget, och nästa steg läggs i kön.
Queuety::rewind_workflow( $workflow_id, to_step: 1 );
Kastar RuntimeException om det inte finns något registrerat tillstånd för målsteg. Kräver Arbetsflödets händelselogg. Mer information finns i Tidsresa.
Queuety::fork_workflow( $workflow_id )
Förgrena ett arbetsflöde som körs till en oberoende kopia med dess aktuella tillstånd. Returnerar det nya arbetsflödes-ID:t.
$forked_id = Queuety::fork_workflow( $workflow_id );
Det förgrenade arbetsflödet får ett eget ID och fungerar oberoende av det ursprungliga. Mer information finns i Förgrening.
Queuety::export_workflow( $workflow_id )
Exportera ett arbetsflödes fullständiga körningshistorik som en JSON-serialiserbar array. Innehåller arbetsflödesraden, alla jobb, arbetsflödeshändelser och loggposter.
$data = Queuety::export_workflow( $workflow_id );
Se Export och uppspelning för information om strukturen JSON och användningsområden.
Queuety::replay_workflow( $data )
Spela upp ett exporterat arbetsflöde i den aktuella miljön. Skapar ett nytt arbetsflöde utifrån exportdata och returnerar det nya arbetsflödes-ID:t.
$new_id = Queuety::replay_workflow( $data );
Mer information finns i Export och uppspelning.
Queuety::replace_wp_cron()
Ersätt det inbyggda systemet för WordPress cron med Queuetys schemaläggare. Fångar upp wp_schedule_event(), wp_unschedule_event() och wp_get_scheduled_event() och dirigerar återkommande händelser via arbetaren Queuety.
Queuety::replace_wp_cron();
Fungerar bara när WordPress har laddats. Mer information finns i WP-Cron-ersättning.
Queuety::restore_wp_cron()
Återställ WordPresss standardbeteende för cron genom att ta bort bryggkrokarna för Queuety cron.
Queuety::restore_wp_cron();
Se WP-Cron-ersättning för begränsningar.
Queuety::signal( $workflow_id, $name, $data )
Skicka en signal till ett arbetsflöde. Om arbetsflödet väntar på den här signalen återupptas det omedelbart. Annars lagras signalen och hämtas när arbetsflödet når motsvarande wait_for_signal-steg.
Queuety::signal( $workflow_id, 'approved' );
// With data merged into workflow state
Queuety::signal( $workflow_id, 'approved', [
'approved_by' => 'admin@example.com',
] );
Mer information finns i Arbetsflödessignaler.
Queuety::approve_workflow( $workflow_id, $data = [], $signal_name = 'approval' )
Semantisk omslutning runt signal() för godkännandeflöden.
Queuety::approve_workflow( $workflow_id, [
'reviewer' => 'editor@example.com',
] );
Queuety::reject_workflow( $workflow_id, $data = [], $signal_name = 'rejected' )
Semantisk omslutning runt signal() för avvisningsflöden.
Queuety::reject_workflow( $workflow_id, [
'reason' => 'needs citations',
] );
Queuety::submit_workflow_input( $workflow_id, $data = [], $signal_name = 'input' )
Semantisk omslutning runt signal() för strukturerad mänsklig inmatning.
Queuety::submit_workflow_input( $workflow_id, [
'notes' => 'Ship after legal review',
] );
Queuety::put_artifact( $workflow_id, $artifact_key, $content, $kind = 'json', $step_index = null, $metadata = [] )
Lagra en beständig artefakt för ett arbetsflöde.
Queuety::put_artifact(
$workflow_id,
'research_brief',
[ 'summary' => 'done' ],
'json',
metadata: [ 'source' => 'agent' ],
);
Queuety::put_current_artifact( $artifact_key, $content, $kind = 'json', $metadata = [] )
Lagra en artefakt för arbetsflödessteget som körs för närvarande.
Queuety::put_current_artifact(
'draft',
[ 'status' => 'ready' ],
'json',
);
Queuety::workflow_artifact( $workflow_id, $artifact_key )
Hämta en lagrad artefakt för ett arbetsflöde.
$artifact = Queuety::workflow_artifact( $workflow_id, 'draft' );
Queuety::workflow_artifacts( $workflow_id, $include_content = false )
Lista artefakter för ett arbetsflöde.
$artifacts = Queuety::workflow_artifacts( $workflow_id );
Queuety::delete_workflow_artifact( $workflow_id, $artifact_key )
Ta bort en artefakt för ett arbetsflöde.
Queuety::delete_workflow_artifact( $workflow_id, 'draft' );
Tillståndsmaskiner
Queuety::machine( $name )
Börja skapa en tillståndsmaskin. Returnerar en StateMachineBuilder.
use Queuety\Enums\StateMachineStatus;
$machine_id = Queuety::machine( 'agent_session' )
->state( 'awaiting_user' )
->on( 'user_message', 'planning' )
->state( 'planning' )
->action( PlanSessionAction::class )
->on( 'planned', 'completed' )
->state( 'completed', StateMachineStatus::Completed )
->dispatch( [ 'thread_id' => 42 ] );
Metoder för StateMachineBuilder
| Metod | Beskrivning |
|---|---|
initial( string $state_name ) |
Ange starttillståndet uttryckligen. |
state( string $state_name, ?StateMachineStatus $terminal_status = null ) |
Börja konfigurera ett tillstånd. |
action( string|array $action_class ) |
Registrera en köad åtgärd vid inträde i det aktuella tillståndet. Ange ett klassnamn eller en strukturerad definition med class, payload och config; payload når StateAction::handle() som $payload. |
on( string $event, string $target, string|array|null $guard_class = null, ?string $name = null ) |
Registrera en händelseövergång från det aktuella tillståndet. Villkoret godtar samma strukturerade format som action(). |
on_queue( string $queue ) |
Ange kön som används för köade tillståndsåtgärder. |
with_priority( Priority $priority ) |
Ange prioritet för köade tillståndsåtgärder. |
max_attempts( int $max_attempts ) |
Ange gränsen för omförsök av köade tillståndsåtgärder. |
version( string $version ) |
Märk maskindefinitionen med en programversionsbeteckning. |
idempotency_key( string $key ) |
Gör utskickningen beständig för en nyckel som anges av anroparen. Om du skickar igen med samma nyckel returneras det ursprungliga maskin-ID:t. |
dispatch( array $initial_state = [] ) |
Skicka iväg maskinen och returnera maskin-ID:t. |
Klasser för tillståndsåtgärder vid inträde kan även ha en valfri config()-metod med samma nycklar för resurspolicy som arbetsflödessteg stöder: concurrency_group, concurrency_limit och cost_units.
Queuety::dispatch_state_machine_definition( $definition, $initial_state = [], $options = [] )
Skicka iväg ett serialiserat definitionspaket för en tillståndsmaskin. Programkod bör i de flesta fall föredra machine()->dispatch(). Den här metoden på lägre nivå finns för att adaptrar ska kunna starta en maskin utan att vara beroende av byggaren direkt.
$machine_id = Queuety::dispatch_state_machine_definition(
$definition,
[ 'thread_id' => 42 ],
[ 'idempotency_key' => 'thread:42' ],
);
Queuety::machine_status( $machine_id )
Hämta maskinens aktuella status. Returnerar ett StateMachineState-objekt eller null.
$status = Queuety::machine_status( $machine_id );
echo $status->name; // 'agent_session'
echo $status->status->value; // 'waiting_event'
echo $status->current_state; // 'awaiting_review'
print_r( $status->state ); // public machine state
print_r( $status->available_events ); // valid incoming events in the current state
StateMachineState exponerar också:
definition_versiondefinition_hashidempotency_keyerror_messagecurrent_actionterminal_status
Queuety::machine_event( $machine_id, $event_name, $payload = [] )
Skicka en extern händelse till en väntande maskin.
Queuety::machine_event(
$machine_id,
'approve',
[
'approved' => true,
'reviewer' => 'editor@example.com',
]
);
Nyttolasten är tillgänglig för övergångsvillkor och slås samman med maskinens publika tillstånd när händelsen godtas.
Queuety::list_machines( $limit = 50, $status = null )
Lista beständiga maskinrader för inspektion.
$machines = Queuety::list_machines();
$waiting = Queuety::list_machines( status: 'waiting_event' );
Varje rad innehåller maskinens id, namn, status, aktuella tillstånd, definitionens version, definitionshash, idempotensnyckel och tidsstämplar för livscykeln.
Queuety::machine_timeline( $machine_id, $limit = 100, $offset = 0 )
Hämta den beständiga händelsetidslinjen för en maskin.
$timeline = Queuety::machine_timeline( $machine_id );
$page_two = Queuety::machine_timeline( $machine_id, 100, 100 );
Varje händelserad innehåller: id, machine_id, job_id, state_name, handler, event, event_name, transition_name, queue, attempt, input, output, state_before, state_after, context, artifacts, chunks, error, duration_ms och created_at.
Queuety::machine_trace( $machine_id )
Hämta ett normaliserat spårningspaket för en felsökare för tillståndsmaskiner UI.
$trace = Queuety::machine_trace( $machine_id );
Spåret innehåller machine, grupperade states, råa events, korrelerade åtgärder jobs, logs, artifacts och chunks.
Queuety::machine_state_at( $machine_id, $event_id )
Hämta det publika tillståndet efter en specifik spårningshändelse för maskinen, eller null om det inte hittas.
$state = Queuety::machine_state_at( $machine_id, $event_id );
Se Tillståndsmaskiner för livscykelmodellen och användningsmönster.
Arbetsflödesmallar
Queuety::define_workflow( $name )
Skapa en arbetsflödesbyggare som mall.
$builder = Queuety::define_workflow( 'onboarding' )
->then( CreateAccountHandler::class )
->then( SendWelcomeEmailHandler::class );
Queuety::register_workflow_template( $builder )
Registrera en arbetsflödesmall.
Queuety::register_workflow_template( $builder );
Queuety::run_workflow( $name, $payload, $options = [] )
Skicka iväg en registrerad arbetsflödesmall med namn. Returnerar arbetsflödes-ID:t.
$workflow_id = Queuety::run_workflow( 'onboarding', [ 'email' => 'user@example.com' ] );
$workflow_id = Queuety::run_workflow(
'onboarding',
[ 'email' => 'user@example.com' ],
[ 'idempotency_key' => 'onboarding:user@example.com' ],
);
Kastar RuntimeException om mallen inte är registrerad.
Queuety::dispatch_workflow_definition( $definition, $payload, $options = [] )
Skicka iväg ett arbetsflöde från ett definitionspaket vid körning.
Programkod bör i de flesta fall föredra run_workflow() eller workflow()->dispatch(). Den här metoden på lägre nivå finns för att återanvändbara adaptrar ska kunna skicka iväg en serialiserad arbetsflödesdefinition utan att vara beroende av interna metoder i arbetsflödeshanteraren.
$workflow_id = Queuety::dispatch_workflow_definition(
$definition,
[ 'email' => 'user@example.com' ],
[ 'idempotency_key' => 'onboarding:user@example.com' ],
);
Queuety::on_action( $hook, $workflow, $map = null, $when = null, $idempotency_key = null, $priority = 10, $accepted_args = null )
Registrera en WordPress-åtgärd som skickar iväg ett arbetsflöde.
Queuety::on_action(
'save_post',
workflow: 'content_review',
map: static fn ( int $post_id, object $post, bool $update ): array => [
'post_id' => $post_id,
'post_type' => $post->post_type,
'update' => $update,
],
when: static fn ( int $post_id, object $post ): bool => 'post' === $post->post_type,
idempotency_key: static fn ( int $post_id ): string => "save_post:{$post_id}",
);
$workflow kan vara antingen:
- ett registrerat arbetsflödesmallnamn
- en inbäddad
WorkflowBuilder
map, when och idempotency_key körs synkront i den aktuella WordPress-begäran. Endast arbetsflödesstegen körs asynkront efter utskickningen.
Se Åtgärdsutlösare för den fullständiga guiden.
Queuety::workflow_templates()
Hämta registret över arbetsflödesmallar.
$registry = Queuety::workflow_templates();
$template = $registry->get( 'onboarding' ); // WorkflowTemplate or null
Queuety::load_workflows( $directory, $recursive )
Läs in och registrera alla arbetsflödesfiler från en katalog. Varje .php-fil ska returnera en WorkflowBuilder. Returnerar antalet registrerade arbetsflöden.
$count = Queuety::load_workflows( __DIR__ . '/workflows/' );
$count = Queuety::load_workflows( __DIR__ . '/workflows/', recursive: true );
Queuety::load_workflow_file( $file_path )
Läs in och registrera en enskild arbetsflödesfil. Returnerar WorkflowTemplate eller null om filen inte returnerar en byggare.
$template = Queuety::load_workflow_file( __DIR__ . '/workflows/onboard-user.php' );
Schemaläggning
Queuety::schedule( $handler, $payload )
Skapa ett återkommande schema. Returnerar en byggare PendingSchedule.
Queuety::schedule( 'cleanup_handler' )
->every( '1 hour' )
->on_queue( 'maintenance' );
Queuety::schedule( 'nightly_report' )
->cron( '0 3 * * *' )
->on_queue( 'reports' );
Metoder för PendingSchedule
| Metod | Beskrivning |
|---|---|
every( string $interval ) |
Ange ett intervalluttryck (e.g. 1 hour, 30 minutes) |
cron( string $expression ) |
Ange ett cron-uttryck med 5 fält |
overlap( OverlapPolicy $policy ) |
Ange överlappningspolicy (standard: Allow). Se Schemaläggning. |
on_queue( string $queue ) |
Ange målkön (standard: default) |
id() |
Tvinga utskickning och returnera schema-ID:t |
Queuety::scheduler()
Hämta den interna instansen Scheduler.
$scheduler = Queuety::scheduler();
$schedules = $scheduler->list();
$scheduler->remove( 'handler_name' );
$count = $scheduler->tick(); // manually trigger
Hanterarregistrering
Queuety::register( $name, $class )
Registrera en hanterarklass under ett namn.
Queuety::register( 'send_email', SendEmailHandler::class );
Queuety::discover_handlers( $directory, $namespace )
Identifiera och registrera automatiskt hanterarklasser från en katalog. Returnerar antalet registrerade hanterare.
$count = Queuety::discover_handlers( __DIR__ . '/handlers', 'MyPlugin\\Handlers' );
Queuety::registry()
Hämta hanterarregistret.
$registry = Queuety::registry();
Observerbarhet
Queuety::logger()
Hämta instansen Logger för att fråga efter loggposter.
$logger = Queuety::logger();
$logs = $logger->for_job( 42 );
$logs = $logger->for_workflow( 7 );
$logs = $logger->for_handler( 'send_email', 50 );
$logs = $logger->for_event( LogEvent::Failed, 50 );
$logs = $logger->since( new \DateTimeImmutable( '-1 hour' ), 100 );
$count = $logger->purge( 30 );
Queuety::metrics()
Hämta instansen Metrics.
$stats = Queuety::metrics()->handler_stats( 60 ); // last 60 minutes
Queuety::webhook_notifier()
Hämta instansen WebhookNotifier.
$notifier = Queuety::webhook_notifier();
$id = $notifier->register( 'job.buried', 'https://hooks.slack.com/...' );
$webhooks = $notifier->list();
$notifier->remove( $id );
Queuety::rate_limiter()
Hämta instansen RateLimiter.
$limiter = Queuety::rate_limiter();
$limiter->register( 'call_openai', 60, 60 );
Cache
Queuety::cache()
Hämta instansen för den aktiva cachebackendlösningen.
$cache = Queuety::cache();
$cache->set( 'my_key', 'my_value', 60 );
$value = $cache->get( 'my_key' );
Queuety::set_cache( $cache )
Åsidosätt cachebackendlösningen. Anropa detta före Queuety::init() om du vill använda en anpassad implementation.
Queuety::set_cache( new RedisCache() );
Queuety::init( $connection );
QUEUETY_CACHE_TTL
Standardvärde för cache-TTL i sekunder (standard: 5). Ange den här konstanten i wp-config.php om du vill ändra standardvärdet för TTL som används av interna cacheåtgärder.
define( 'QUEUETY_CACHE_TTL', 10 );
Mer information om backendlösningar och automatisk identifiering finns i Cachelagring.
Tillståndsmaskinens händelselogg
Queuety::machine_events()
Hämta instansen StateMachineEventLog.
$log = Queuety::machine_events();
Arbetsflödets händelselogg
Queuety::workflow_events()
Hämta instansen WorkflowEventLog.
$log = Queuety::workflow_events();
Queuety::workflow_timeline( $workflow_id, $limit = 100, $offset = 0 )
Hämta hela tidslinjen med händelser för ett arbetsflöde. Returnerar en array med händelserader ordnade efter ID.
$events = Queuety::workflow_timeline( $workflow_id );
$next = Queuety::workflow_timeline( $workflow_id, 100, 100 );
Varje händelserad innehåller: id, workflow_id, job_id, parent_event_id, step_index, step_name, step_type, handler, event, queue, attempt, input, output, state_before, state_after, context, artifacts, chunks, error, error_message (kopierat från error.message), duration_ms och created_at.
Queuety::workflow_trace( $workflow_id )
Hämta ett normaliserat spårningspaket för en arbetsflödesfelsökare UI.
$trace = Queuety::workflow_trace( $workflow_id );
Spåret innehåller workflow, grupperade steps, råa events, jobs, logs, artifacts, chunks, signals och wait_dependencies.
Queuety::trace_input( $input )
Ange programnivåindata för arbetsflödessteget som körs för närvarande.
Queuety::trace_output( $output )
Ange programnivåutdata för arbetsflödessteget som körs för närvarande.
Queuety::trace_context( array $context )
Slå samman programnivåkontext med arbetsflödessteget som körs för närvarande.
Queuety::workflow_state_at( $workflow_id, $step_index )
Hämta det publika tillståndet efter att ett specifikt arbetsflödessteg har slutförts eller återupptagits, eller null om det inte hittas.
$state = Queuety::workflow_state_at( $workflow_id, 2 );
Se Arbetsflödets händelselogg för användningsområden och kommandona CLI.
Interna instanser
De här metoderna returnerar interna instanser för avancerade användningsområden.
| Metod | Returnerar | Beskrivning |
|---|---|---|
Queuety::queue() |
Queue |
Köåtgärder (ta i anspråk, frigöra, begrava) |
Queuety::worker() |
Worker |
Styrning av arbetarprocesser |
Queuety::workflow_manager() |
Workflow |
Orkestrering av arbetsflöden |
Queuety::machines() |
StateMachine |
Hantering av tillståndsmaskinens livscykel |
Queuety::connection() |
Connection |
Databasanslutning |
Queuety::batch_manager() |
BatchManager |
Hantering av batchars livscykel (avbryt, rensa) |
Queuety::chunk_store() |
ChunkStore |
Lagring av chunkar för strömmande steg |
Queuety::machine_events() |
StateMachineEventLog |
Spårningshändelser för tillståndsmaskiner och normaliserade spårningspaket |
Queuety::workflow_events() |
WorkflowEventLog |
Spårningshändelser för arbetsflöden och normaliserade spårningspaket |
Queuety::resource_manager() |
ResourceManager |
Arbetarens antagningsprofiler, viktade budgetar och inspektion av systemminne |
Queuety::cache() |
Cache |
Instans för cachebackendlösning |
Testning
Queuety::fake()
Ersätt kön med en minnesbaserad testdublett. Returnerar en instans QueueFake som registrerar utskickade jobb utan att komma åt databasen. create_batch() registrerar också falska batchmetadata; kedjor verifieras via de enskilda jobb som skickas iväg.
$fake = Queuety::fake();
SendEmailJob::dispatch( 'user@example.com', 'Hello', 'Hi!' );
$fake->assert_pushed( SendEmailJob::class );
Queuety::reset()
Återställ allt internt tillstånd, inklusive kötestdublettens tillstånd. Anropa i tearDown().
Queuety::reset();
Metoder för QueueFake
| Metod | Beskrivning |
|---|---|
assert_pushed( string $class, ?Closure $callback ) |
Kontrollera att en jobbklass har lagts till i kön. En valfri återanropsfunktion filtrerar efter jobbdata. |
assert_pushed_times( string $class, int $count ) |
Kontrollera att ett jobb har lagts till exakt N gånger. |
assert_not_pushed( string $class ) |
Kontrollera att ett jobb aldrig har lagts till i kön. |
assert_nothing_pushed() |
Kontrollera att inga jobb alls har lagts till i kön. |
assert_batched( ?Closure $callback ) |
Kontrollera att en batch har skickats iväg. En valfri återanropsfunktion filtrerar efter batchdata. |
pushed( string $class ) |
Hämta alla registrerade utskick för en klass. Returnerar en array. |
batches() |
Hämta alla registrerade batchar. Returnerar en array. |
reset() |
Rensa alla registrerade jobb och batchar. |
Se Testning för fullständiga exempel.
Gränssnitt
Handler
Gränssnitt för enkla jobbhanterare.
interface Handler {
public function handle( array $payload ): void;
public function config(): array;
}
config() kan returnera queue, max_attempts, backoff, rate_limit, concurrency_group, concurrency_limit och cost_units.
Step
Gränssnitt för hanterare av arbetsflödessteg.
interface Step {
public function handle( array $state ): array;
public function config(): array;
}
config() kan returnera max_attempts, backoff, concurrency_group, concurrency_limit och cost_units.
Contracts\ForEachHandler
Gränssnitt för dynamiska för varje-grenhanterare.
namespace Queuety\Contracts;
interface ForEachHandler {
public function handle_item( array $state, mixed $item, int $index ): array;
public function config(): array;
}
config() kan returnera max_attempts, backoff, rate_limit, concurrency_group, concurrency_limit och cost_units.
Contracts\ForEachReducer
Valfri reducerare för för varje-resultat.
namespace Queuety\Contracts;
interface ForEachReducer {
public function reduce( array $state, array $for_each ): array;
}
Contracts\Compensation
Gränssnitt för hanterare av återställningsåtgärder för steg.
namespace Queuety\Contracts;
interface Compensation {
public function handle( array $state ): void;
}
Contracts\RepeatCondition
Gränssnitt för loopvillkor som används av repeat_until() och repeat_while() när en jämförelse med en tillståndsnyckel är för begränsad.
namespace Queuety\Contracts;
interface RepeatCondition {
public function matches( array $state ): bool;
}
Contracts\StateAction
Gränssnitt för köade åtgärder vid inträde i tillstånd.
namespace Queuety\Contracts;
interface StateAction {
public function handle( array $state, ?string $event = null, array $event_payload = [], array $payload = [] ): array|string;
}
$payload förmedlar den strukturerade payload från åtgärdsdefinitionen, om maskinen definierades med en sådan. Returnera uppdateringar av det publika tillståndet. Inkludera _event och eventuellt _event_payload när åtgärden ska utlösa en omedelbar övergång.
Tillståndsåtgärder kan även ha en valfri metod config(). Queuety läser concurrency_group, concurrency_limit och cost_units från den när åtgärden vid inträde läggs i kön.
Contracts\StateGuard
Gränssnitt för övergångsvillkor i tillståndsmaskiner.
namespace Queuety\Contracts;
interface StateGuard {
public function allows( array $state, array $event_payload, string $event, array $payload = [] ): bool;
}
Contracts\Job
Gränssnitt för självständiga jobbklasser som kan skickas iväg. Jobbklasser kapslar in sin nyttolast som publika egenskaper och exekveringslogik i handle().
namespace Queuety\Contracts;
interface Job {
public function handle(): void;
}
Jobbklasser kan valfritt definiera en metod middleware() som returnerar en array med instanser av Contracts\Middleware.
Contracts\Cache
Gränssnitt för cachebackendlösningar. Se Cachelagring för inbyggda implementationer och anpassade backendlösningar.
namespace Queuety\Contracts;
interface Cache {
public function get( string $key ): mixed;
public function set( string $key, mixed $value, int $ttl = 0 ): void;
public function delete( string $key ): void;
public function has( string $key ): bool;
public function add( string $key, mixed $value, int $ttl = 0 ): bool;
public function flush(): void;
}
| Metod | Returnerar | Beskrivning |
|---|---|---|
get( $key ) |
mixed |
Hämta ett värde. Returnerar null om det inte hittas eller har löpt ut. |
set( $key, $value, $ttl ) |
void |
Lagra ett värde. TTL på 0 innebär att värdet inte löper ut. |
delete( $key ) |
void |
Ta bort ett värde. |
has( $key ) |
bool |
Kontrollera om en nyckel finns och inte har löpt ut. |
add( $key, $value, $ttl ) |
bool |
Atomisk ange-om-den-inte-finns. Returnerar true om värdet angavs. |
flush() |
void |
Ta bort alla objekt från cachen. |
WorkflowEventLog
Registrerar övergångar mellan arbetsflödessteg med fullständig spårningskontext. Åtkomst via Queuety::workflow_events().
| Metod | Returnerar | Beskrivning |
|---|---|---|
record_event( array $event ) |
void |
Registrera en rå spårningshändelse |
record_step_started( ... ) |
void |
Registrera en step_started-händelse med indata och tillståndet före körningen |
record_step_completed( ... ) |
void |
Registrera en step_completed-händelse med indata, utdata, tillstånd före och tillstånd efter |
record_step_failed( ... ) |
void |
Registrera en step_failed-händelse med spårningskontext och strukturerade feldetaljer |
get_timeline( int $workflow_id, ?int $limit = 100, int $offset = 0 ) |
array |
Hämta arbetsflödets spårningshändelser i ordning, med valfri sidindelning |
get_trace( int $workflow_id ) |
array |
Hämta ett normaliserat spårningspaket |
get_state_at_step( int $workflow_id, int $step_index ) |
array|null |
Hämta det publika tillståndet efter att ett specifikt steg har slutförts eller återupptagits |
prune( int $older_than_days ) |
int |
Ta bort händelser som är äldre än det angivna antalet dagar. Returnerar antalet borttagna rader. |
StateMachineEventLog
Registrerar tillståndsmaskinens livscykel-, åtgärds-, övergångs- och villkorshändelser med samma spårningsfält som arbetsflödeshändelser.
| Metod | Returnerar | Beskrivning |
|---|---|---|
record_event( array $event ) |
void |
Registrera en rå händelse i maskinspårningen |
get_timeline( int $machine_id, ?int $limit = 100, int $offset = 0 ) |
array |
Hämta händelser i maskinspårningen i ordning, med valfri sidindelning |
get_trace( int $machine_id ) |
array |
Hämta ett normaliserat paket med maskinspårning |
get_state_at_event( int $machine_id, int $event_id ) |
array|null |
Hämta det publika tillståndet efter en viss händelse i maskinspårningen |
prune( int $older_than_days ) |
int |
Ta bort händelser som är äldre än det angivna antalet dagar. Returnerar antalet borttagna rader. |
Contracts\StreamingStep
Gränssnitt för hanterare av arbetsflödessteg som producerar en ström av delar. Varje värde som avges sparas omedelbart i databasen. Se Strömmande steg.
namespace Queuety\Contracts;
interface StreamingStep {
public function stream( array $state, array $existing_chunks = [] ): \Generator;
public function on_complete( array $chunks, array $state ): array;
public function config(): array;
}
| Metod | Beskrivning |
|---|---|
stream( $state, $existing_chunks ) |
Generator som avger strängdelar. Varje avrop utlöser en omedelbar skrivning till databasen. Vid nytt försök innehåller $existing_chunks tidigare sparade delar. |
on_complete( $chunks, $state ) |
Anropas när strömmen är färdig. Returnerar data som ska slås samman med arbetsflödestillståndet. |
config() |
Valfri konfiguration. Stöder max_attempts, backoff, concurrency_group, concurrency_limit och cost_units. |
ChunkStore
Hanterar sparandet av delar för strömmande steg. Åtkomst via Queuety::chunk_store().
| Metod | Returnerar | Beskrivning |
|---|---|---|
get_chunks( int $job_id ) |
string[] |
Hämta alla delar för ett jobb, sorterade efter delindex |
append_chunk( int $job_id, int $chunk_index, string $content, ?int $workflow_id, ?int $step_index ) |
void |
Lägg till en enskild del |
clear_chunks( int $job_id ) |
void |
Ta bort alla delar för ett jobb |
chunk_count( int $job_id ) |
int |
Räkna delarna för ett jobb |
get_accumulated( int $job_id ) |
string |
Sammanfoga alla delar till en sträng |
Heartbeat
Statisk hjälpfunktion för att skicka aktivitetslivstecken inifrån steghanterare och strömmande steg. Se Livstecken.
| Metod | Beskrivning |
|---|---|
Heartbeat::init( int $job_id, Connection $conn ) |
Ange jobbkontexten. Anropas automatiskt av arbetaren. |
Heartbeat::beat( array $progress = [] ) |
Skicka ett livstecken. Uppdaterar reserved_at och sparar vid behov förloppsdata i heartbeat_data. |
Heartbeat::clear() |
Rensa jobbkontexten. Anropas automatiskt av arbetaren. |
Heartbeat::current_job_id() |
Hämta det aktuella jobb-ID:t (för testning). |
Contracts\Middleware
Gränssnitt för jobb-middleware. Middleware omsluter jobbkörningen i en pipeline utformad som en lök.
namespace Queuety\Contracts;
interface Middleware {
public function handle( object $job, \Closure $next ): void;
}
Egenskaper
Dispatchable
Tillhandahåller statiska utsändningsmetoder för jobbklasser som implementerar Contracts\Job. Konstruktörens argument skickas vidare när jobbinstansen skapas.
use Queuety\Contracts\Job;
use Queuety\Dispatchable;
class SendEmailJob implements Job {
use Dispatchable;
// ...
}
// Dispatches a new SendEmailJob instance
SendEmailJob::dispatch( 'user@example.com', 'Subject', 'Body' );
| Metod | Returnerar | Beskrivning |
|---|---|---|
dispatch( ...$args ) |
PendingJob |
Skapa en instans och skicka ut den |
dispatch_if( bool $condition, ...$args ) |
PendingJob|null |
Skicka endast ut om $condition är sant |
dispatch_unless( bool $condition, ...$args ) |
PendingJob|null |
Skicka endast ut om $condition är falskt |
with_chain( array $jobs ) |
ChainBuilder |
Starta en kedja från den här jobbklassen |
// Conditional dispatch
SendEmailJob::dispatch_if( $user->wants_email, $user->email, 'Hello', 'Hi!' );
SendEmailJob::dispatch_unless( $maintenance_mode, $user->email, 'Hello', 'Hi!' );
// Chain from a job class
FetchDataJob::with_chain( [
new ProcessDataJob(),
new NotifyCompleteJob(),
] )->dispatch();
Jobbegenskaper
Jobbklasser kan deklarera publika egenskaper som arbetaren läser via reflection för att åsidosätta beteendet för nya försök och tidsgränser.
| Egenskap | Typ | Beskrivning |
|---|---|---|
$tries |
int |
Maximalt antal försök innan jobbet begravs |
$timeout |
int |
Maximal körtid i sekunder (kräver pcntl) |
$backoff |
array |
Ökande fördröjningsvärden i sekunder för varje nytt försök |
class ImportProductsJob implements Job {
use Dispatchable;
public int $tries = 5;
public int $timeout = 120;
public array $backoff = [ 10, 30, 60, 120 ];
// ...
}
Hooken failed()
När ett jobb begravs efter att alla nya försök har förbrukats anropar arbetaren en metod failed() på jobbinstansen, om en sådan har definierats.
public function failed( \Throwable $exception ): void {
error_log( "Job failed: {$exception->getMessage()}" );
}
Inbyggd middleware
Alla middlewareklasser implementerar Contracts\Middleware och finns i namnrymden Queuety\Middleware.
| Klass | Beskrivning |
|---|---|
RateLimited( int $max, int $window ) |
Upprätthåll en hastighetsgräns på $max körningar per $window sekunder |
Timeout( int $seconds ) |
Avsluta jobbet efter $seconds sekunder (kräver pcntl) |
UniqueJob( ?string $key ) |
Förhindra samtidig körning med ett databaslås |
WithoutOverlapping( string $key, int $release_after ) |
Förhindra överlappande körningar med automatisk låsexpiration |
ThrottlesExceptions( int $max_attempts, int $decay_minutes ) |
Begränsa undantag för att förhindra jobbfloder när en extern tjänst ligger nere |
Se Middleware för användningsdetaljer och exempel.
Uppräkningar
Priority
enum Priority: int {
case Low = 0;
case Normal = 1;
case High = 2;
case Urgent = 3;
}
JobStatus
enum JobStatus: string {
case Pending = 'pending';
case Processing = 'processing';
case Completed = 'completed';
case Failed = 'failed';
case Buried = 'buried';
}
WorkflowStatus
enum WorkflowStatus: string {
case Running = 'running';
case Completed = 'completed';
case Failed = 'failed';
case Paused = 'paused';
case WaitingForSignal = 'waiting_for_signal';
case WaitingForWorkflows = 'waiting_for_workflows';
case Cancelled = 'cancelled';
}
StateMachineStatus
enum StateMachineStatus: string {
case Running = 'running';
case WaitingEvent = 'waiting_event';
case Completed = 'completed';
case Failed = 'failed';
case Paused = 'paused';
case Cancelled = 'cancelled';
}
BackoffStrategy
enum BackoffStrategy: string {
case Fixed = 'fixed';
case Linear = 'linear';
case Exponential = 'exponential';
}
ForEachMode
enum ForEachMode: string {
case All = 'all';
case FirstSuccess = 'first_success';
case Quorum = 'quorum';
}
WaitMode
enum WaitMode: string {
case All = 'all';
case Any = 'any';
case Quorum = 'quorum';
}
LogEvent
enum LogEvent: string {
case Started = 'started';
case Completed = 'completed';
case Failed = 'failed';
case Buried = 'buried';
case Retried = 'retried';
case WorkflowStarted = 'workflow_started';
case WorkflowCompleted = 'workflow_completed';
case WorkflowFailed = 'workflow_failed';
case WorkflowPaused = 'workflow_paused';
case WorkflowResumed = 'workflow_resumed';
case WorkflowCancelled = 'workflow_cancelled';
case WorkflowRewound = 'workflow_rewound';
case WorkflowForked = 'workflow_forked';
case WorkflowDeadlineExceeded = 'workflow_deadline_exceeded';
case Debug = 'debug';
}
OverlapPolicy
enum OverlapPolicy: string {
case Allow = 'allow';
case Skip = 'skip';
case Buffer = 'buffer';
}
Se Schemaläggning för information om hur varje policy fungerar.
Attribut
#[QueuetyHandler]
PHP 8-attribut för automatisk registrering. Se PHP Attribut.
use Queuety\Attributes\QueuetyHandler;
#[QueuetyHandler( name: 'send_email', queue: 'emails', max_attempts: 5 )]
class SendEmailHandler implements Handler {
// ...
}
CLI-brygga
Queuety::cli_command()
Returnerar det publicerade WP-CLI-rotkommandonamnet.
Standardrotkommandot är queuety. Definiera QUEUETY_CLI_COMMAND innan Queuety startar om kommandot ska publiceras under ett annat namn.
Queuety::cli_command_map()
Returnerar katalogen Queuety CLI som kan serialiseras, för testmiljöer som behöver förstå vilka kommandon som levereras utan att genomsöka klasserna WP-CLI.
Varje post innehåller:
- ett stabilt åtgärds-ID
- den relativa sökvägen CLI
- hanterarklassen och metoden WP-CLI
- möjliga körningsmål
- adaptern som normaliserar råa argument CLI till en körningsplan
Queuety::resolve_cli_command( $path, $args, $assoc_args )
Omvandlar ett parsad CLI-anrop till körningsplanen som testmiljön ska köra.
$plan = Queuety::resolve_cli_command(
[ 'workflow', 'export' ],
[ '42' ],
[ 'output' => '/tmp/workflow.json' ]
);
echo $plan['callable']; // Queuety\Queuety::export_workflow_to_file
print_r( $plan['arguments'] );
Körningsplaner är utformade med hänsyn till transporten:
- kommandon löses upp till publika anropsbara PHP med normaliserade argument
- katalogen listar alla möjliga körningsmål i förväg, medan
callableochtransportanger vilken gren som valts för den parsade indata
Detta är standarden Queuety använder för agenttestmiljöer: stabilt åtgärds-ID, publikt API-mål och adapterägd normalisering av sådant som bara gäller CLI, till exempel standardvärden för köer, avkodning av nyttolaster JSON, förgrening av arbetarpooler och hantering av exportfiler för arbetsflöden.