diff --git a/src/Symfony/Component/Messenger/CHANGELOG.md b/src/Symfony/Component/Messenger/CHANGELOG.md index 7a438586cc7a5..30e195f7ee635 100644 --- a/src/Symfony/Component/Messenger/CHANGELOG.md +++ b/src/Symfony/Component/Messenger/CHANGELOG.md @@ -10,6 +10,7 @@ CHANGELOG * `InMemoryTransport` handle acknowledged and rejected messages. * Made all dispatched worker event classes final. * Added support for `from_transport` attribute on `messenger.message_handler` tag. + * Added support for passing `dbindex` as a query parameter to the redis transport DSN. 4.3.0 ----- diff --git a/src/Symfony/Component/Messenger/Tests/Transport/RedisExt/ConnectionTest.php b/src/Symfony/Component/Messenger/Tests/Transport/RedisExt/ConnectionTest.php index 0af92af0a9942..73b6d51815ce8 100644 --- a/src/Symfony/Component/Messenger/Tests/Transport/RedisExt/ConnectionTest.php +++ b/src/Symfony/Component/Messenger/Tests/Transport/RedisExt/ConnectionTest.php @@ -104,6 +104,15 @@ public function testAuth() Connection::fromDsn('redis://password@localhost/queue', [], $redis); } + public function testDbIndex() + { + $redis = new \Redis(); + + Connection::fromDsn('redis://password@localhost/queue?dbindex=2', [], $redis); + + $this->assertSame(2, $redis->getDbNum()); + } + public function testFirstGetPendingMessagesThenNewMessages() { $redis = $this->getMockBuilder(\Redis::class)->disableOriginalConstructor()->getMock(); diff --git a/src/Symfony/Component/Messenger/Transport/RedisExt/Connection.php b/src/Symfony/Component/Messenger/Transport/RedisExt/Connection.php index 20857c45f0459..b3c6f6dc3580c 100644 --- a/src/Symfony/Component/Messenger/Transport/RedisExt/Connection.php +++ b/src/Symfony/Component/Messenger/Transport/RedisExt/Connection.php @@ -32,6 +32,7 @@ class Connection 'consumer' => 'consumer', 'auto_setup' => true, 'stream_max_entries' => 0, // any value higher than 0 defines an approximate maximum number of stream entries + 'dbindex' => 0, ]; private $connection; @@ -56,6 +57,10 @@ public function __construct(array $configuration, array $connectionCredentials = $this->connection->auth($connectionCredentials['auth']); } + if (($dbIndex = $configuration['dbindex'] ?? self::DEFAULT_OPTIONS['dbindex']) && !$this->connection->select($dbIndex)) { + throw new InvalidArgumentException(sprintf('Redis connection failed: %s', $redis->getLastError())); + } + $this->stream = $configuration['stream'] ?? self::DEFAULT_OPTIONS['stream']; $this->group = $configuration['group'] ?? self::DEFAULT_OPTIONS['group']; $this->consumer = $configuration['consumer'] ?? self::DEFAULT_OPTIONS['consumer']; @@ -97,12 +102,19 @@ public static function fromDsn(string $dsn, array $redisOptions = [], \Redis $re unset($redisOptions['stream_max_entries']); } + $dbIndex = null; + if (\array_key_exists('dbindex', $redisOptions)) { + $dbIndex = filter_var($redisOptions['dbindex'], FILTER_VALIDATE_INT); + unset($redisOptions['dbindex']); + } + return new self([ 'stream' => $stream, 'group' => $group, 'consumer' => $consumer, 'auto_setup' => $autoSetup, 'stream_max_entries' => $maxEntries, + 'dbindex' => $dbIndex, ], $connectionCredentials, $redisOptions, $redis); }
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: