A robust and feature-rich asynchronous programming capability for Laravel using PHP attributes.
composer require fereydooni/laravel-async-flow
The package will automatically register its service provider if you're using Laravel 5.5+.
Publish the configuration file:
php artisan vendor:publish --provider="AsyncFlow\Providers\AsyncFlowServiceProvider"
Run the migrations:
php artisan migrate
- PHP 8.1+
- Laravel 10.x
- Queue driver configured (Redis recommended)
Use the Async
attribute to mark methods for asynchronous execution:
use AsyncFlow\Attributes\Async;
use AsyncFlow\Attributes\AsyncHandler;
class TaskService
{
#[Async(queue: 'high', delay: 10, tries: 3, timeout: 120)]
public function processData($data)
{
// Heavy computation or API call
return $data * 2;
}
#[AsyncHandler(event: 'success')]
public function handleSuccess($result)
{
Log::info('Task succeeded with result: ' . $result);
}
#[AsyncHandler(event: 'failed')]
public function handleFailure($exception)
{
Log::error('Task failed: ' . $exception->getMessage());
}
}
use AsyncFlow\AsyncManager;
// Inject the AsyncManager
$manager = app(AsyncManager::class);
// Dispatch an async task
$task = $manager->dispatch(TaskService::class, 'processData', [10]);
// Get task status
$status = $manager->getTaskStatus($task->id); // 'pending', 'running', 'completed', 'failed'
// Get task result (only available if task is completed)
$result = $manager->getTaskResult($task->id); // Returns 20 if completed
use AsyncFlow\Attributes\Async;
class ApiService
{
#[Async(queue: 'api')]
public function fetchData($url)
{
return Http::get($url)->json();
}
}
The configuration file (config/async-flow.php
) allows you to:
- Enable/disable async execution globally
- Set default queue, delay, tries, and timeout settings
- Configure queue driver
- Set log storage backend
queue
(string): The queue to use (default: 'default')delay
(int): Seconds to delay execution (default: 0)tries
(int): Maximum retry attempts (default: 3)timeout
(int): Maximum execution time in seconds (default: 60)
event
(string): Event type to handle ('success', 'failed', default: 'success')callback
(string): Optional callback method/function
composer test
This package is open-sourced software licensed under the MIT license.