Fix: Update QueueInitializer to use Redis connection pool and explicit parameters
- Use RedisConnectionPool when available for consistency - Use named parameters when creating RedisQueue to prevent parameter confusion - Fix RedisQueue constructor error where strings were passed instead of connection object
This commit is contained in:
@@ -5,17 +5,20 @@ declare(strict_types=1);
|
|||||||
namespace App\Framework\Queue;
|
namespace App\Framework\Queue;
|
||||||
|
|
||||||
use App\Framework\Core\PathProvider;
|
use App\Framework\Core\PathProvider;
|
||||||
|
use App\Framework\DI\Container;
|
||||||
use App\Framework\DI\Initializer;
|
use App\Framework\DI\Initializer;
|
||||||
use App\Framework\Logging\Logger;
|
use App\Framework\Logging\Logger;
|
||||||
use App\Framework\Logging\ValueObjects\LogContext;
|
use App\Framework\Logging\ValueObjects\LogContext;
|
||||||
use App\Framework\Queue\Exceptions\RedisExtensionNotLoadedException;
|
use App\Framework\Queue\Exceptions\RedisExtensionNotLoadedException;
|
||||||
use App\Framework\Redis\RedisConfig;
|
use App\Framework\Redis\RedisConfig;
|
||||||
use App\Framework\Redis\RedisConnection;
|
use App\Framework\Redis\RedisConnection;
|
||||||
|
use App\Framework\Redis\RedisConnectionPool;
|
||||||
|
|
||||||
final readonly class QueueInitializer
|
final readonly class QueueInitializer
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private PathProvider $pathProvider
|
private PathProvider $pathProvider,
|
||||||
|
private Container $container
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,14 +31,25 @@ final readonly class QueueInitializer
|
|||||||
throw RedisExtensionNotLoadedException::notLoaded();
|
throw RedisExtensionNotLoadedException::notLoaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try to use Redis connection pool if available, otherwise create direct connection
|
||||||
|
$redisConnection = null;
|
||||||
|
if ($this->container->has(RedisConnectionPool::class)) {
|
||||||
|
$pool = $this->container->get(RedisConnectionPool::class);
|
||||||
|
$redisConnection = $pool->getQueueConnection();
|
||||||
|
} else {
|
||||||
|
// Fallback to direct connection creation
|
||||||
$redisConfig = new RedisConfig(
|
$redisConfig = new RedisConfig(
|
||||||
host: 'redis',
|
host: 'redis',
|
||||||
port: 6379,
|
port: 6379,
|
||||||
database: 2 // Use DB 2 for queue
|
database: 2 // Use DB 2 for queue
|
||||||
);
|
);
|
||||||
$redisConnection = new RedisConnection($redisConfig, 'queue');
|
$redisConnection = new RedisConnection($redisConfig, 'queue');
|
||||||
|
}
|
||||||
|
|
||||||
return new RedisQueue($redisConnection, 'commands');
|
return new RedisQueue(
|
||||||
|
connection: $redisConnection,
|
||||||
|
queueName: 'commands'
|
||||||
|
);
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
// Fallback to file queue if Redis is not available
|
// Fallback to file queue if Redis is not available
|
||||||
$logger->info("Using file queue (Redis not available)", LogContext::withData([
|
$logger->info("Using file queue (Redis not available)", LogContext::withData([
|
||||||
|
|||||||
Reference in New Issue
Block a user