Beanstalkd reserve, delete and bury in three sentences

Beanstalkd models a job’s lifecycle explicitly, and the three verbs are the whole API worth knowing.

$job = $queue->reserveWithTimeout(5);   // mine for TTR seconds

try {
    $this->handle($job->getData());
    $queue->delete($job);                // done, gone
} catch (Transient $e) {
    $queue->release($job, 1024, 60);     // back to the tube, in 60s
} catch (Throwable $e) {
    $queue->bury($job);                  // set aside for a human
}

A reserved job returns to the ready queue automatically when its time-to-run expires, which is what makes a crashed worker recoverable without any coordination. Buried jobs sit in their own state until somebody kicks them back, which is a dead letter queue built into the server rather than a convention. The distinction between release and bury is the one that matters in a handler: transient failures go back, permanent ones go aside.