diff --git a/composer.json b/composer.json index caf8a0fc..45fb1416 100644 --- a/composer.json +++ b/composer.json @@ -15,12 +15,12 @@ "php-amqplib/php-amqplib": "^v3.6" }, "require-dev": { - "phpunit/phpunit": "^10.0|^11.0", + "phpunit/phpunit": "^11.0", "mockery/mockery": "^1.0", "laravel/horizon": "^5.0", "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", "laravel/pint": "^1.2", - "laravel/framework": "^9.0|^10.0|^11.0|^12.0" + "laravel/framework": "^11.0|^12.0" }, "autoload": { "psr-4": { @@ -33,9 +33,6 @@ } }, "extra": { - "branch-alias": { - "dev-master": "13.0-dev" - }, "laravel": { "providers": [ "VladimirYuldashev\\LaravelQueueRabbitMQ\\LaravelQueueRabbitMQServiceProvider" diff --git a/src/Queue/Connection/ConfigFactory.php b/src/Queue/Connection/ConfigFactory.php index f3ecd409..678f29c0 100644 --- a/src/Queue/Connection/ConfigFactory.php +++ b/src/Queue/Connection/ConfigFactory.php @@ -18,17 +18,21 @@ public static function make(array $config = []): AMQPConnectionConfig { return tap(new AMQPConnectionConfig, function (AMQPConnectionConfig $connectionConfig) use ($config) { // Set the connection to a Lazy by default - $connectionConfig->setIsLazy(! in_array( - Arr::get($config, 'lazy') ?? true, - [false, 0, '0', 'false', 'no'], - true) + $connectionConfig->setIsLazy( + ! in_array( + Arr::get($config, 'lazy') ?? true, + [false, 0, '0', 'false', 'no'], + true + ) ); // Set the connection to unsecure by default - $connectionConfig->setIsSecure(in_array( - Arr::get($config, 'secure'), - [true, 1, '1', 'true', 'yes'], - true) + $connectionConfig->setIsSecure( + in_array( + Arr::get($config, 'secure'), + [true, 1, '1', 'true', 'yes'], + true + ) ); if ($connectionConfig->isSecure()) { @@ -38,6 +42,7 @@ public static function make(array $config = []): AMQPConnectionConfig self::getHostFromConfig($connectionConfig, $config); self::getHeartbeatFromConfig($connectionConfig, $config); self::getNetworkProtocolFromConfig($connectionConfig, $config); + self::getReadWriteTimeoutFromConfig($connectionConfig, $config); }); } @@ -99,4 +104,24 @@ protected static function getNetworkProtocolFromConfig(AMQPConnectionConfig $con $connectionConfig->setNetworkProtocol($networkProtocol); } } + + protected static function getReadWriteTimeoutFromConfig(AMQPConnectionConfig $connectionConfig, array $config): void + { + $readTimeout = Arr::get($config, self::CONFIG_OPTIONS.'.read_timeout'); + $writeTimeout = Arr::get($config, self::CONFIG_OPTIONS.'.write_timeout'); + + if (is_numeric($readTimeout)) { + $timeoutValue = (int) $readTimeout; + if ($timeoutValue > 0) { + $connectionConfig->setReadTimeout($timeoutValue); + } + } + + if (is_numeric($writeTimeout)) { + $timeoutValue = (int) $writeTimeout; + if ($timeoutValue > 0) { + $connectionConfig->setWriteTimeout($timeoutValue); + } + } + } } diff --git a/tests/Feature/ConnectorTest.php b/tests/Feature/ConnectorTest.php index f4e330c3..327cea63 100644 --- a/tests/Feature/ConnectorTest.php +++ b/tests/Feature/ConnectorTest.php @@ -168,6 +168,8 @@ public function test_no_verification_ssl_connection(): void 'verify_peer' => false, 'passphrase' => null, ], + 'read_timeout' => 10, + 'write_timeout' => 15, ], 'worker' => env('RABBITMQ_WORKER', 'default'), @@ -180,8 +182,10 @@ public function test_no_verification_ssl_connection(): void $connection = $queue->connection('rabbitmq'); $this->assertInstanceOf(RabbitMQQueue::class, $connection); $this->assertInstanceOf(AMQPSSLConnection::class, $connection->getConnection()); - /** @var AMQPConnectionConfig */ + /** @var AMQPConnectionConfig $config */ $config = $connection->getConnection()->getConfig(); $this->assertFalse($config->getSslVerify()); + $this->assertEquals(10, $config->getReadTimeout()); + $this->assertEquals(15, $config->getWriteTimeout()); } }