enqueue/pheanstalk
Enqueue Beanstalk Transport integrates Beanstalkd with the Enqueue queue specification, letting you send and consume messages via the Pheanstalk client. Includes docs, CI, and Packagist distribution for PHP apps and workers.
composer require enqueue/pheanstalk pda/pheanstalk enqueue/serializer
config/queue.php under connections:
'beanstalkd' => [
'driver' => 'enqueue',
'connection' => 'beanstalkd',
'queue' => 'default',
'options' => [
'connection' => [
'host' => env('BEANSTALKD_HOST', '127.0.0.1'),
'port' => env('BEANSTALKD_PORT', 11300),
'timeout' => 5.0,
],
'serializer' => 'enqueue.serializer',
],
],
use App\Jobs\ProcessOrder;
dispatch(new ProcessOrder($orderId))->onConnection('beanstalkd');
php artisan queue:work --queue=default
Note: For Enqueue consumers, use:
vendor/bin/enqueue consume beanstalkd --queue=default
// Dispatch job
dispatch(new SendWelcomeEmail($user))->onConnection('beanstalkd');
// Job class
class SendWelcomeEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue;
public $user;
public function handle()
{
Mail::to($this->user->email)->send(new WelcomeEmail($this->user));
}
}
dispatch() with onConnection('beanstalkd').dispatch(new GenerateReportJob($params))->onConnection('beanstalkd')->delay(now()->addMinutes(5));
queue:work with Enqueue’s consumer:
vendor/bin/enqueue consume beanstalkd --queue=default --memory-limit=128M
vendor/bin/enqueue consume beanstalkd --queue=high,default,low
put with delay:
dispatch(new Job())->delay(30); // 30 seconds
// Dispatch to a high-priority tube
dispatch(new Job())->onQueue('high-priority');
config/queue.php:
'beanstalkd' => [
'connection' => 'beanstalkd',
'queue' => 'high-priority', // Default tube
],
HandleJobsMiddleware or Enqueue’s middleware:
use Enqueue\Middleware\Middleware;
$middleware = new Middleware();
$middleware->add(new RetryMiddleware());
$middleware->add(new LoggingMiddleware());
enqueue/batch to group jobs:
$batch = new Batch();
foreach ($orders as $order) {
$batch->add(new ProcessOrderJob($order));
}
dispatch($batch)->onConnection('beanstalkd');
enqueue/doctrine for job tracking or use Beanstalkd’s stats:
beanstalkd-console -z
enqueue/serializer with json or igbinary:
'options' => [
'serializer' => 'enqueue.serializer.json',
],
enqueue/delayed:
$context = new Context();
$context->setDelay(60); // Retry after 60 seconds
$context->setTtr(300); // Time-to-run: 5 minutes
$producer->send($message, $context);
config/queue.php:
'options' => [
'connection' => [
'timeout' => 10.0,
'read_timeout' => 5.0,
],
],
Queue facade may not fully support Enqueue’s features (e.g., priority tubes). Use raw Enqueue methods when needed:
use Enqueue\Client\ProducerInterface;
$producer = app(ProducerInterface::class);
$producer->send(new Message('data'));
beanstalkd-console -z
Look for stalled jobs or tube sizes.config/logging.php:
'channels' => [
'enqueue' => [
'driver' => 'single',
'path' => storage_path('logs/enqueue.log'),
'level' => 'debug',
],
],
docker run -p 11300:11300 schickling/beanstalkd
Enqueue\Serializer\SerializerInterface for Laravel-specific payloads:
class LaravelJobSerializer implements SerializerInterface
{
public function serialize($data): string
{
return serialize($data);
}
public function unserialize(string $data): array
{
return unserialize($data);
}
}
namespace App\Providers;
use Illuminate\Queue\QueueManager;
use Enqueue\Client\ProducerInterface;
class QueueServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('beanstalkd', function ($app) {
return new EnqueueProducer($app['enqueue.connection']);
});
$this->app->extend('queue', function ($queue, $app) {
return new EnqueueQueue($queue, $app['beanstalkd']);
});
}
}
$middleware = new Middleware();
$middleware->add(new CustomMiddleware());
$producer->setMiddleware($middleware);
'beanstalkd' => [
'connection' => 'beanstalkd',
'queue' => 'laravel-queue-name', // Maps to Beanstalkd tube
],
visibility_timeout to prevent premature job release:
'options' => [
'visibility_timeout' => 60, // 60 seconds
],
max-job-size (default: 64KB). Increase if needed:
beanstalkd -l 10485760 # 10MB max job size
How can I help you explore Laravel packages today?