Installation:
composer require allprogrammic/resque-bundle
Ensure ext-redis is enabled in your PHP environment.
Configuration:
Create a YAML config file (e.g., config/recurring_tasks.yml) with your recurring tasks:
my_recurring_task:
cron: "*/5 * * * *" # Every 5 minutes
class: App\Jobs\MyJob
queue: default
args: ["arg1", "arg2"]
description: "Run every 5 minutes"
Register the Bundle:
Add to config/bundles.php (Symfony 4+):
return [
// ...
AllProgrammic\ResqueBundle\AllProgrammicResqueBundle::class => ['all' => true],
];
Run the Recurring Worker:
php bin/console resque:recurring config/recurring_tasks.yml
Schedule a job to run every hour (e.g., a cleanup task):
cleanup_task:
cron: "0 * * * *"
class: App\Jobs\CleanupJob
queue: cleanup
description: "Daily cleanup at the start of every hour"
Job Creation:
Extend Resque\Job or use Laravel-style job classes (if compatible). Example:
namespace App\Jobs;
use Resque\Job;
class MyJob extends Job {
protected $args;
public function __construct($arg1, $arg2) {
$this->args = [$arg1, $arg2];
}
public function perform() {
// Logic here
}
}
Queue Configuration:
allprogrammic/redis-client).config/resque.php (if provided) or via bundle defaults.Dynamic Task Loading: Load tasks dynamically via CLI:
php bin/console resque:recurring config/recurring_tasks_{env}.yml
(Useful for environment-specific schedules.)
Error Handling:
SwiftmailerBundle (configured alerts).# config/packages/swiftmailer.yaml
swiftmailer:
mailers:
default:
transport: "%env(MAILER_DSN)%"
host: "%env(MAILER_HOST)%"
username: "%env(MAILER_USER)%"
password: "%env(MAILER_PASSWORD)%"
Monitoring:
resque:workers to inspect active workers.MyJob::dispatch() inside another job.*/10 * * * * for every 10 minutes.recurring_tasks.yml and recurring_tasks_prod.yml.Redis Connection Issues:
redis-cli ping
allprogrammic/redis-client config for host/port/auth.Cron Syntax Errors:
* * * * * (every minute) vs. */5 * * * * (every 5 minutes).Job Class Not Found:
class path in YAML matches the fully qualified namespace (e.g., App\Jobs\MyJob).Resque\Job or is compatible.Swiftmailer Alerts:
SwiftmailerBundle is registered.MAILER_* env vars.Worker Stuck on Tasks:
pkill -f "php bin/console resque:work"
php bin/console resque:work -v
redis-cli LRANGE resque:queue:default 0 -1
resque:recurring with a small cron interval (e.g., */1 * * * *) for testing.Custom Job Classes:
Override Resque\Job to add shared logic (e.g., logging, retries):
namespace App\Jobs;
use Resque\Job as BaseJob;
class BaseAppJob extends BaseJob {
public function onFailure($exception) {
// Custom failure logic
}
}
Dynamic Config Loading: Load YAML configs from multiple files:
# config/recurring_tasks.yml
imports:
- { resource: recurring_tasks_common.yml }
- { resource: recurring_tasks_prod.yml }
Worker Hooks: Extend the worker class to add pre/post hooks:
namespace App\Worker;
use AllProgrammic\ResqueBundle\Worker\Worker as BaseWorker;
class CustomWorker extends BaseWorker {
protected function onStart() {
// Pre-worker logic
}
}
Register in config/services.yaml:
services:
App\Worker\CustomWorker:
tags: ['resque.worker']
Environment Variables: Use env vars for sensitive data (e.g., Redis password):
# config/packages/all_programmic_resque.yaml
all_programmic_resque:
redis:
password: "%env(REDIS_PASSWORD)%"
How can I help you explore Laravel packages today?