Handleidingen
Werk op de achtergrond
Resource-events, de jobwachtrij en geplande taken.
Werk dat een paginarequest niet mag ophouden, draait op de achtergrond: bevestigingsmails, imports, aanroepen naar andere systemen, nachtelijke rapporten. Nimbly heeft daar drie onderdelen voor: resource-events, een jobwachtrij en een scheduler.
Resource-events
Een resource geeft aan wat er gebeurt nadat een record is gemaakt, gewijzigd of verwijderd:
"events": {
"create": ["job:lead-created"],
"update": ["lead-updated"]
}
- Een gewone naam draait direct na het schrijven een functie.
lead-updatedroeptlead_updated($event)aan uitlib/lead-updated.phpin een module. - Een
job:-regel zet in plaats daarvan een job in de wachtrij, zodat het request meteen klaar is en het werk een moment later gebeurt.
Het event bevat de handeling, de resource, de UUID van het record en de data.
Jobs
Een job in de wachtrij wordt afgehandeld door een functie die naar zijn type is genoemd, in de lib/ van een module:
<?php
// ext/modules/leads/lib/lead-created.php
function lead_created_job($job)
{
$lead = $job['payload']['data'] ?? [];
load_library('email');
load_library('env');
set_variable('lead', $lead);
$sent = email([
'service' => env('MAIL_SERVICE', 'resend'),
'from' => env('MAIL_FROM'),
'from_name' => env('MAIL_FROM_NAME'),
'recipient' => $lead['email'],
'subject' => 'Thank you for your message',
'tpl' => 'email-lead-thanks',
]);
if (!$sent) {
throw new Exception('Confirmation email not sent');
}
return true;
}
Een job die een fout gooit, wordt opnieuw geprobeerd, standaard tot vijf keer. Een job die definitief mislukt, wordt als mislukt gemarkeerd, in de admin getoond en per e-mail gemeld aan SYSTEM_ALERT_EMAIL. Zet vanuit je eigen code een job in de wachtrij met job_enqueue('report-build', ['month' => '2026-10']).
De wachtrij bewaart wat er moet gebeuren en de data daarbij, nooit commando's. /nb-admin/jobs toont jobs in de wachtrij, lopende, afgeronde en mislukte jobs, met hun laatste fout.
De scheduler
De scheduler draait elke minuut. Hij draait altijd het onderhoud van het framework: de jobwachtrij, het opruimen van sessies, oude jobs en oude geschiedenis, en het samenvatten van de statistieken per uur. Een project voegt eigen taken toe in ext/cli/schedule.inc, of per omgeving in schedule.prod.inc en schedule.stage.inc:
<?php
return [
['id' => 'report-nightly', 'command' => 'report:build', 'daily_at' => '02:00', 'timezone' => 'Europe/Amsterdam'],
['id' => 'rates-refresh', 'command' => 'rates:refresh', 'every_minutes' => 15],
];
./nimbly schedule:init maakt deze bestanden. Eigen commando's registreer je in ext/cli/commands.php.
In een container start de scheduler vanzelf. Op een eigen server installeer je hem één keer per server; zie Jobs en de scheduler. ./nimbly schedule:status meldt of elke taak op tijd heeft gedraaid.