fereydooni / laravel-async-flow
A robust and feature-rich asynchronous programming capability for Laravel using PHP attributes
dev-master
2025-04-24 16:13 UTC
Requires
- php: ^8.1
- illuminate/database: ^10.0
- illuminate/queue: ^10.0
- illuminate/support: ^10.0
Requires (Dev)
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/phpstan: ^1.10
This package is auto-updated.
Last update: 2025-04-24 16:16:19 UTC
README
A robust and feature-rich asynchronous programming capability for Laravel using PHP attributes.
Installation
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
Requirements
- PHP 8.1+
- Laravel 10.x
- Queue driver configured (Redis recommended)
Usage
Define Async Methods
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()); } }
Dispatch Async Tasks
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
Async HTTP Requests
use AsyncFlow\Attributes\Async; class ApiService { #[Async(queue: 'api')] public function fetchData($url) { return Http::get($url)->json(); } }
Configuration
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
Available Attribute Options
Async Attribute
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)
AsyncHandler Attribute
event
(string): Event type to handle ('success', 'failed', default: 'success')callback
(string): Optional callback method/function
Testing
composer test
License
This package is open-sourced software licensed under the MIT license.