friendsofhyperf / async-queue-closure-job
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
Requires
- hyperf/support: ~3.1.73
README
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/supportpackage. The core implementation (CallQueuedClosureand 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 namedelay(int $delay): static- Set execution delay in secondssetMaxAttempts(int $maxAttempts): static- Set maximum retry attemptswhen($condition, $callback): static- Execute callback when condition is trueunless($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/supportpackageFriendsOfHyperf\Support\CallQueuedClosureFriendsOfHyperf\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?
- Eliminates Circular Dependencies: The support package previously depended on this package, creating a circular dependency
- Single Source of Truth: Core functionality now lives in one place
- Simplified Dependency Tree: Reduces maintenance overhead
- 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.