internal static IDriver CreateDriver(Uri uri, Config config, IPooledConnectionFactory connectionFactory)
        {
            var logger = config.Logger;

            var parsedUri       = uri.ParseBoltUri(DefaultBoltPort);
            var routingContext  = uri.ParseRoutingContext(DefaultBoltPort);
            var routingSettings = new RoutingSettings(parsedUri, routingContext, config);

            var metrics = config.MetricsEnabled ? new DefaultMetrics() : null;
            var connectionPoolSettings = new ConnectionPoolSettings(config, metrics);

            var retryLogic = new AsyncRetryLogic(config.MaxTransactionRetryTime, logger);

            EnsureNoRoutingContextOnBolt(uri, routingContext);

            IConnectionProvider connectionProvider = null;

            if (parsedUri.IsRoutingUri())
            {
                connectionProvider =
                    new LoadBalancer(connectionFactory, routingSettings, connectionPoolSettings, logger);
            }
            else
            {
                connectionProvider =
                    new ConnectionPool(parsedUri, connectionFactory, connectionPoolSettings, logger, null);
            }

            return(new Internal.Driver(parsedUri, connectionProvider, retryLogic, logger, metrics, config));
        }
示例#2
0
        internal static IDriver CreateDriver(Uri uri, Config config, IPooledConnectionFactory connectionFactory)
        {
            var logger = config.DriverLogger;

            var parsedUri       = uri.ParseBoltUri(DefaultBoltPort);
            var routingContext  = uri.ParseRoutingContext();
            var routingSettings = new RoutingSettings(parsedUri, routingContext, config);

            var metrics = config.MetricsFactory?.CreateMetrics(config);
            var connectionPoolSettings = new ConnectionPoolSettings(config, metrics);

            var retryLogic = new AsyncRetryLogic(config.MaxTransactionRetryTime, logger);

            IConnectionProvider connectionProvider = null;

            switch (parsedUri.Scheme.ToLower())
            {
            case "bolt":
                EnsureNoRoutingContext(uri, routingContext);
                connectionProvider =
                    new ConnectionPool(parsedUri, connectionFactory, connectionPoolSettings, logger);
                break;

            case "bolt+routing":
                connectionProvider =
                    new LoadBalancer(connectionFactory, routingSettings, connectionPoolSettings, logger);
                break;

            default:
                throw new NotSupportedException($"Unsupported URI scheme: {parsedUri.Scheme}");
            }

            return(new Internal.Driver(parsedUri, connectionProvider, retryLogic, logger, metrics, config));
        }
 public ClusterConnectionPool(
     IEnumerable <Uri> initUris,
     IPooledConnectionFactory connectionFactory,
     ConnectionPoolSettings poolSettings,
     ILogger logger
     ) : this(initUris, new ConnectionPoolFactory(connectionFactory, poolSettings, logger), logger)
 {
 }
 public ConnectionPoolFactory(IPooledConnectionFactory connectionFactory, ConnectionPoolSettings poolSettings,
                              ILogger logger)
 {
     Throw.ArgumentNullException.IfNull(connectionFactory, nameof(connectionFactory));
     Throw.ArgumentNullException.IfNull(poolSettings, nameof(poolSettings));
     _connectionFactory = connectionFactory;
     _poolSettings      = poolSettings;
     _logger            = logger;
 }
 public ConnectionPoolFactory(IPooledConnectionFactory connectionFactory, ConnectionPoolSettings poolSettings,
                              IDictionary <string, string> routingContext, ILogger logger)
 {
     Throw.ArgumentNullException.IfNull(connectionFactory, nameof(connectionFactory));
     Throw.ArgumentNullException.IfNull(poolSettings, nameof(poolSettings));
     _connectionFactory = connectionFactory;
     _poolSettings      = poolSettings;
     _logger            = logger;
     _routingContext    = routingContext;
 }
示例#6
0
        public LoadBalancer(
            IPooledConnectionFactory connectionFactory,
            RoutingSettings routingSettings,
            ConnectionPoolSettings poolSettings,
            IDriverLogger logger)
        {
            _logger = logger;

            _clusterConnectionPool = new ClusterConnectionPool(Enumerable.Empty <Uri>(), connectionFactory, poolSettings, logger);
            _routingTableManager   = new RoutingTableManager(routingSettings, this, logger);
            _loadBalancingStrategy = CreateLoadBalancingStrategy(routingSettings.Strategy, _clusterConnectionPool, _logger);
        }
示例#7
0
        public LoadBalancer(
            IPooledConnectionFactory connectionFactory,
            RoutingSettings routingSettings,
            ConnectionPoolSettings poolSettings,
            ILogger logger)
        {
            _logger = logger;
            var uris = routingSettings.InitialServers;

            _clusterConnectionPool = new ClusterConnectionPool(uris, connectionFactory, poolSettings, logger);
            _routingTableManager   = new RoutingTableManager(routingSettings, this, logger);

            _loadBalancingStrategy = CreateLoadBalancingStrategy(routingSettings.Strategy, _clusterConnectionPool, logger);
        }
示例#8
0
        public LoadBalancer(
            IPooledConnectionFactory connectionFactory,
            RoutingSettings routingSettings,
            ConnectionPoolSettings poolSettings,
            ILogger logger)
        {
            _logger = logger;

            _clusterConnectionPool =
                new ClusterConnectionPool(Enumerable.Empty <Uri>(), connectionFactory, poolSettings, logger);
            _routingTableManager          = new RoutingTableManager(routingSettings, this, logger);
            _loadBalancingStrategy        = CreateLoadBalancingStrategy(_clusterConnectionPool, _logger);
            _initialServerAddressProvider = routingSettings.InitialServerAddressProvider;
        }
 public MonitoredPooledConnectionFactory(IPooledConnectionFactory factory)
 {
     _delegate = factory;
 }