Install the Bundle:
composer require autobus-php/autobus-bus-bundle
Choose a queue system (e.g., AWS SQS or Google PubSub) and install its bundle:
composer require enqueue/sqs # or enqueue/gps
Configure .env:
ENQUEUE_DSN=sqs: # or gps:
AWS_REGION=your-region
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
Run Migrations (if applicable) and clear cache:
php bin/console doctrine:migrations:migrate
php bin/console cache:clear
First Job Creation:
RunnerInterface (or extending AbstractRunner):
namespace App\Bus\Jobs;
use Autobus\Bundle\BusBundle\Runner\AbstractRunner;
class SendEmailJob extends AbstractRunner
{
public function run(): void
{
// Your job logic here
$this->logger->info('Email sent!');
}
}
config/services.yaml:
services:
App\Bus\Jobs\SendEmailJob:
tags: ['bus.runner']
Trigger the Job:
* * * * * php bin/console autobus:cron:run
php bin/console autobus:sqs:consume
Define Jobs:
AbstractRunner for boilerplate (e.g., logging, retries).run() for job logic. Use dependency injection for services:
public function __construct(private Mailer $mailer) {}
Configure Jobs via UI:
{
"email": "user@example.com",
"subject": "Hello"
}
Trigger Mechanisms:
autobus:cron:run (e.g., hourly/daily).
# config/packages/autobus.yaml
autobus:
cron:
jobs:
send_emails:
job: App\Bus\Jobs\SendEmailJob
schedule: "0 * * * *" # Every hour
BusPublisher:
$publisher = $this->container->get('autobus.bus.publisher');
$publisher->publish(new SendEmailJob(), ['email' => 'user@example.com']);
autobus:api:trigger to fire jobs externally.Error Handling:
onFailure() in AbstractRunner for custom retries:
public function onFailure(\Throwable $e): void
{
$this->logger->error('Failed: ' . $e->getMessage());
// Requeue or notify
}
Monitoring:
run().Laravel-Specific:
container with Laravel’s app() helper:
$publisher = app('autobus.bus.publisher');
Artisan facade for CLI commands:
use Illuminate\Support\Facades\Artisan;
Artisan::call('autobus:cron:run');
Queue Systems:
sqs:ReceiveMessage, sqs:DeleteMessage, and sqs:ChangeMessageVisibility permissions.pubsub.subscriber role.Testing:
BusPublisher in unit tests:
$this->mock(BusPublisher::class)
->shouldReceive('publish')
->once();
autobus:test:run to simulate job execution in tests.Queue Consumer Stuck:
ENQUEUE_DSN in .env.sqs://access_key:secret@?queue=your_queue) and credentials.Jobs Not Triggering:
php bin/console autobus:cron:run --verbose) and ensure the command is scheduled.Payload Serialization Issues:
json_encode($payload, JSON_THROW_ON_ERROR) or implement __serialize().Permission Denied (AWS SQS):
AmazonSQSFullAccess policy (temporarily for testing) or refine permissions.Duplicate Jobs:
Logs:
config/packages/dev/autobus.yaml:
autobus:
debug: true
var/log/dev.log for job execution traces.Command-Line Flags:
--verbose:
php bin/console autobus:sqs:consume --verbose
php bin/console autobus:test:run App\Bus\Jobs\SendEmailJob
Database Inspection:
autobus_job table to verify job statuses:
SELECT * FROM autobus_job WHERE status = 'pending';
Custom Job Storage:
JobRepositoryInterface:
services:
App\Bus\Repositories\CustomJobRepository:
tags: ['autobus.job.repository']
Middleware:
namespace App\Bus\Middleware;
use Autobus\Bundle\BusBundle\Runner\RunnerInterface;
use Autobus\Bundle\BusBundle\Runner\RunnerMiddlewareInterface;
class LoggingMiddleware implements RunnerMiddlewareInterface
{
public function handle(RunnerInterface $runner): void
{
$runner->getLogger()->info('Job started: ' . $runner::class);
}
}
config/services.yaml:
tags: ['autobus.runner.middleware']
Event Listeners:
JobStarted, JobFailed) via Symfony’s event dispatcher:
$dispatcher->addListener(JobEvents::JOB_STARTED, function (JobStartedEvent $event) {
// Log or notify
});
Dynamic Job Configuration:
# config/packages/autobus.yaml
autobus:
jobs:
send_email:
retry_count: 3
timeout: 300
How can I help you explore Laravel packages today?