Файл: vendor/laravel/framework/src/Illuminate/Queue/Connectors/SqsConnector.php
Строк: 123
<?php
namespace IlluminateQueueConnectors;
use AwsCredentialsCredentialProvider;
use AwsSqsSqsClient;
use IlluminateQueueSqsQueue;
use IlluminateSupportArr;
use InvalidArgumentException;
class SqsConnector implements ConnectorInterface
{
/**
* Establish a queue connection.
*
* @param array $config
* @return IlluminateContractsQueueQueue
*/
public function connect(array $config)
{
$config = $this->getDefaultConfiguration($config);
if ($credentials = $this->resolveCredentialProvider($config)) {
$config['credentials'] = $credentials;
} elseif (! empty($config['key']) && ! empty($config['secret'])) {
$config['credentials'] = Arr::only($config, ['key', 'secret']);
if (! empty($config['token'])) {
$config['credentials']['token'] = $config['token'];
}
}
return new SqsQueue(
new SqsClient(
Arr::except($config, ['token', 'overflow'])
),
$config['queue'],
$config['prefix'] ?? '',
$config['suffix'] ?? '',
$config['after_commit'] ?? null,
$config['overflow'] ?? [],
);
}
/**
* Resolve a credential provider from the given config.
*
* @param array $config
* @return callable|null
*
* @throws InvalidArgumentException
*/
protected function resolveCredentialProvider(array $config)
{
$credentials = $config['credentials'] ?? null;
$provider = is_array($credentials) ? ($credentials['provider'] ?? null) : $credentials;
if (! is_string($provider)) {
return $provider;
}
$options = is_array($credentials) ? Arr::except($credentials, ['provider']) : [];
$resolved = match ($provider) {
'ecs' => CredentialProvider::ecsCredentials($options),
'instance' => CredentialProvider::instanceProfile($options),
default => throw new InvalidArgumentException(
"Invalid credential provider [{$provider}]."
),
};
return CredentialProvider::memoize($resolved);
}
/**
* Get the default configuration for SQS.
*
* @param array $config
* @return array
*/
protected function getDefaultConfiguration(array $config)
{
return array_merge([
'version' => 'latest',
'http' => [
'timeout' => 60,
'connect_timeout' => 60,
],
], $config);
}
}