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

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.