friendsofhyperf/async-queue-closure-job

This package is abandoned and no longer maintained. No replacement package was suggested.

The async queue closure job component for Hyperf.

Fund package maintenance!
huangdijia
hdj.me/sponsors

Installs: 68

Dependents: 1

Suggesters: 1

Security: 0

Stars: 0

Watchers: 0

Forks: 0

pkg:composer/friendsofhyperf/async-queue-closure-job

v3.1.4 2025-11-15 01:02 UTC

This package is auto-updated.

Last update: 2025-11-15 01:21:55 UTC


README

Latest Stable Version Total Downloads License

The async queue closure job component for Hyperf. Execute closures as background jobs with full support for dependency injection, fluent configuration.

Note: Starting from v3.1.73, this package serves as a convenience wrapper around the friendsofhyperf/support package. The core implementation (CallQueuedClosure and related classes) has been moved to the support package to eliminate circular dependencies and improve package architecture.

Installation

composer require friendsofhyperf/async-queue-closure-job

Basic Usage

use function FriendsOfHyperf\AsyncQueueClosureJob\dispatch;

// Simple closure dispatch
dispatch(function () {
    // Your job logic here
    var_dump('Hello from closure job!');
});

// With max attempts (retry limit)
dispatch(function () {
    // Your job logic here
})->setMaxAttempts(3);

Advanced Usage

Fluent API Configuration

use function FriendsOfHyperf\AsyncQueueClosureJob\dispatch;

// Chain multiple configurations
dispatch(function () {
    // Your job logic here
})
    ->onConnection('high-priority')
    ->delay(60) // Execute after 60 seconds
    ->setMaxAttempts(5);

Conditional Execution

use function FriendsOfHyperf\AsyncQueueClosureJob\dispatch;

$condition = true;

// Execute only when condition is true
dispatch(function () {
    // Your job logic here
})
    ->when($condition, function ($dispatch) {
        $dispatch->onConnection('conditional-connection');
    });

// Execute only when condition is false
dispatch(function () {
    // Your job logic here
})
    ->unless($condition, function ($dispatch) {
        $dispatch->delay(30);
    });

Dependency Injection

use function FriendsOfHyperf\AsyncQueueClosureJob\dispatch;

// Automatic dependency injection
dispatch(function (UserService $userService, LoggerInterface $logger) {
    $users = $userService->getActiveUsers();
    $logger->info('Processing ' . count($users) . ' users');
    // Process users...
});

// With custom parameters
dispatch(function (UserService $userService, int $userId) {
    $user = $userService->find($userId);
    // Process user...
})->setMaxAttempts(3);

API Reference

dispatch(Closure $closure): PendingAsyncQueueDispatch

The main dispatch function that creates a closure job.

PendingAsyncQueueDispatch Methods

  • onConnection(string $connection): static - Set the connection name
  • delay(int $delay): static - Set execution delay in seconds
  • setMaxAttempts(int $maxAttempts): static - Set maximum retry attempts
  • when($condition, $callback): static - Execute callback when condition is true
  • unless($condition, $callback): static - Execute callback when condition is false

Supported Closure Types

  • Simple closures without parameters
  • Closures with dependency injection
  • Closures with captured variables (use)
  • Closures with nullable parameters

Package Architecture

As of v3.1.73, this package has been refactored to improve the overall architecture:

  • Core Implementation: Moved to friendsofhyperf/support package
    • FriendsOfHyperf\Support\CallQueuedClosure
    • FriendsOfHyperf\Support\Traits\ClosureParameterInjection
  • Convenience Layer: This package now provides a namespace alias for easy migration
    • FriendsOfHyperf\AsyncQueueClosureJob\dispatch() → delegates to support package

Why This Change?

  1. Eliminates Circular Dependencies: The support package previously depended on this package, creating a circular dependency
  2. Single Source of Truth: Core functionality now lives in one place
  3. Simplified Dependency Tree: Reduces maintenance overhead
  4. Non-Breaking: Existing code continues to work without changes

Migration Guide

No action required! The namespace FriendsOfHyperf\AsyncQueueClosureJob\dispatch() continues to work as before. However, if you want to use the new location directly:

// Old (still supported)
use function FriendsOfHyperf\AsyncQueueClosureJob\dispatch;

// New (recommended for new code)
use function FriendsOfHyperf\Support\dispatch;

Testing

Tests for the core functionality are now maintained in the support package.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Contact

License

MIT

Made with ❤️ for the Hyperf community