Jobs¶
Sometimes it's reasonable to execute some actions in background. For example, when sending an email, to prevent a user to wait until sending is processed.
Scheduling¶
<?php
use Espo\Core\Job\JobSchedulerFactory;
use Espo\Core\Job\QueueName;
/** @var JobSchedulerFactory $jobSchedulerFactory */
$jobSchedulerFactory->create()
->setClassName($jobClassName) // should implement `Espo\Core\Job\Job` interface
->setQueue(QueueName::Q0) // optional
->setGroup('some-group-name') // optional
->setData([
'someKey' => $someValue,
])
->schedule();
You can pass JobSchedulerFactory as a constructor dependency.
Job¶
<?php
namespace Espo\Custom\MyJobs;
use Espo\Core\Job\Job;
use Espo\Core\Job\Job\Data;
class MyJob implements Job
{
public function __construct(/* pass needed dependencies */)
{}
public function run(Data $data): void
{
// job logic here
}
}
Queues¶
Jobs within a queue are processed one by one.
Queues available out of the box:
- e0 – intended for email sending; run as often as possible;
- q0 – for general use; run as often as possible;
- q1 – for general use; run every minute.
Portion size is controller by config parameters.
Groups¶
A group name can be any string with max length of 128 characters. Jobs with the same group name are processed one by one.