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:
2025-10-31 11:17:15 +01:00
parent fc81379575
commit 957f43aac4

View File

@@ -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([