Microsoft.AspNetCore.SignalR.Redis API review (#2036)

This commit is contained in:
James Newton-King 2018-04-16 15:56:49 +12:00 committed by GitHub
parent b3a9011698
commit 0da06fb5d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 27 additions and 25 deletions

View File

@ -42,7 +42,7 @@ namespace Microsoft.AspNetCore.SignalR.Microbenchmarks
var protocols = GenerateProtocols(ProtocolCount).ToArray(); var protocols = GenerateProtocols(ProtocolCount).ToArray();
var options = Options.Create(new RedisOptions() var options = Options.Create(new RedisOptions()
{ {
Factory = _ => Task.FromResult<IConnectionMultiplexer>(new TestConnectionMultiplexer(server)) ConnectionFactory = _ => Task.FromResult<IConnectionMultiplexer>(new TestConnectionMultiplexer(server))
}); });
var resolver = new DefaultHubProtocolResolver(protocols, NullLogger<DefaultHubProtocolResolver>.Instance); var resolver = new DefaultHubProtocolResolver(protocols, NullLogger<DefaultHubProtocolResolver>.Instance);

View File

@ -1,3 +1,6 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Buffers; using System.Buffers;
using System.Collections.Generic; using System.Collections.Generic;

View File

@ -65,7 +65,7 @@ namespace ChatSample
{ {
// TODO: handle connection failures // TODO: handle connection failures
_redisConnection = await ConnectToRedis(_options, _logger); _redisConnection = await ConnectToRedis(_options, _logger);
_redisDatabase = _redisConnection.GetDatabase(_options.Options.DefaultDatabase.GetValueOrDefault()); _redisDatabase = _redisConnection.GetDatabase(_options.Configuration.DefaultDatabase.GetValueOrDefault());
// Register connection // Register connection
_redisDatabase.SetAdd(ServerIndexRedisKey, ServerId); _redisDatabase.SetAdd(ServerIndexRedisKey, ServerId);
@ -103,14 +103,14 @@ namespace ChatSample
private static async Task<IConnectionMultiplexer> ConnectToRedis(RedisOptions options, ILogger logger) private static async Task<IConnectionMultiplexer> ConnectToRedis(RedisOptions options, ILogger logger)
{ {
var loggerTextWriter = new LoggerTextWriter(logger); var loggerTextWriter = new LoggerTextWriter(logger);
if (options.Factory != null) if (options.ConnectionFactory != null)
{ {
return await options.Factory(loggerTextWriter); return await options.ConnectionFactory(loggerTextWriter);
} }
if (options.Options.EndPoints.Any()) if (options.Configuration.EndPoints.Any())
{ {
return await ConnectionMultiplexer.ConnectAsync(options.Options, loggerTextWriter); return await ConnectionMultiplexer.ConnectAsync(options.Configuration, loggerTextWriter);
} }
var configurationOptions = new ConfigurationOptions(); var configurationOptions = new ConfigurationOptions();

View File

@ -10,7 +10,6 @@ using MessagePack;
using Microsoft.AspNetCore.Internal; using Microsoft.AspNetCore.Internal;
using Microsoft.AspNetCore.SignalR.Internal; using Microsoft.AspNetCore.SignalR.Internal;
using Microsoft.AspNetCore.SignalR.Protocol; using Microsoft.AspNetCore.SignalR.Protocol;
using StackExchange.Redis;
namespace Microsoft.AspNetCore.SignalR.Redis.Internal namespace Microsoft.AspNetCore.SignalR.Redis.Internal
{ {

View File

@ -19,7 +19,7 @@ namespace Microsoft.Extensions.DependencyInjection
{ {
return AddRedis(builder, o => return AddRedis(builder, o =>
{ {
o.Options = ConfigurationOptions.Parse(redisConnectionString); o.Configuration = ConfigurationOptions.Parse(redisConnectionString);
}); });
} }
@ -34,7 +34,7 @@ namespace Microsoft.Extensions.DependencyInjection
{ {
return AddRedis(builder, o => return AddRedis(builder, o =>
{ {
o.Options = ConfigurationOptions.Parse(redisConnectionString); o.Configuration = ConfigurationOptions.Parse(redisConnectionString);
configure(o); configure(o);
}); });
} }

View File

@ -45,7 +45,7 @@ namespace Microsoft.AspNetCore.SignalR.Redis
_channels = new RedisChannels(typeof(THub).FullName); _channels = new RedisChannels(typeof(THub).FullName);
_protocol = new RedisProtocol(hubProtocolResolver.AllProtocols); _protocol = new RedisProtocol(hubProtocolResolver.AllProtocols);
RedisLog.ConnectingToEndpoints(_logger, options.Value.Options.EndPoints, _serverName); RedisLog.ConnectingToEndpoints(_logger, options.Value.Configuration.EndPoints, _serverName);
_ = EnsureRedisServerConnection(); _ = EnsureRedisServerConnection();
} }

View File

@ -11,31 +11,31 @@ namespace Microsoft.AspNetCore.SignalR.Redis
{ {
public class RedisOptions public class RedisOptions
{ {
public ConfigurationOptions Options { get; set; } = new ConfigurationOptions public ConfigurationOptions Configuration { get; set; } = new ConfigurationOptions
{ {
// Enable reconnecting by default // Enable reconnecting by default
AbortOnConnectFail = false AbortOnConnectFail = false
}; };
public Func<TextWriter, Task<IConnectionMultiplexer>> Factory { get; set; } public Func<TextWriter, Task<IConnectionMultiplexer>> ConnectionFactory { get; set; }
internal async Task<IConnectionMultiplexer> ConnectAsync(TextWriter log) internal async Task<IConnectionMultiplexer> ConnectAsync(TextWriter log)
{ {
// Factory is publically settable. Assigning to a local variable before null check for thread safety. // Factory is publically settable. Assigning to a local variable before null check for thread safety.
var localFactory = Factory; var factory = ConnectionFactory;
if (localFactory == null) if (factory == null)
{ {
// REVIEW: Should we do this? // REVIEW: Should we do this?
if (Options.EndPoints.Count == 0) if (Configuration.EndPoints.Count == 0)
{ {
Options.EndPoints.Add(IPAddress.Loopback, 0); Configuration.EndPoints.Add(IPAddress.Loopback, 0);
Options.SetDefaultPorts(); Configuration.SetDefaultPorts();
} }
return await ConnectionMultiplexer.ConnectAsync(Options, log); return await ConnectionMultiplexer.ConnectAsync(Configuration, log);
} }
return await localFactory(log); return await factory(log);
} }
} }
} }

View File

@ -26,16 +26,16 @@ namespace Microsoft.AspNetCore.SignalR.Redis.Tests
var options = provider.GetService<IOptions<RedisOptions>>(); var options = provider.GetService<IOptions<RedisOptions>>();
Assert.NotNull(options.Value); Assert.NotNull(options.Value);
Assert.NotNull(options.Value.Options); Assert.NotNull(options.Value.Configuration);
Assert.Equal(password, options.Value.Options.Password); Assert.Equal(password, options.Value.Configuration.Password);
Assert.Collection(options.Value.Options.EndPoints, Assert.Collection(options.Value.Configuration.EndPoints,
endpoint => endpoint =>
{ {
var dnsEndpoint = Assert.IsType<DnsEndPoint>(endpoint); var dnsEndpoint = Assert.IsType<DnsEndPoint>(endpoint);
Assert.Equal(host, dnsEndpoint.Host); Assert.Equal(host, dnsEndpoint.Host);
Assert.Equal(port, dnsEndpoint.Port); Assert.Equal(port, dnsEndpoint.Port);
}); });
Assert.Equal(useSsl, options.Value.Options.Ssl); Assert.Equal(useSsl, options.Value.Configuration.Ssl);
} }
} }
} }

View File

@ -550,7 +550,7 @@ namespace Microsoft.AspNetCore.SignalR.Redis.Tests
private RedisHubLifetimeManager<MyHub> CreateLifetimeManager(TestRedisServer server, MessagePackHubProtocolOptions messagePackOptions = null, JsonHubProtocolOptions jsonOptions = null) private RedisHubLifetimeManager<MyHub> CreateLifetimeManager(TestRedisServer server, MessagePackHubProtocolOptions messagePackOptions = null, JsonHubProtocolOptions jsonOptions = null)
{ {
var options = new RedisOptions() { Factory = async (t) => await Task.FromResult(new TestConnectionMultiplexer(server)) }; var options = new RedisOptions() { ConnectionFactory = async (t) => await Task.FromResult(new TestConnectionMultiplexer(server)) };
messagePackOptions = messagePackOptions ?? new MessagePackHubProtocolOptions(); messagePackOptions = messagePackOptions ?? new MessagePackHubProtocolOptions();
jsonOptions = jsonOptions ?? new JsonHubProtocolOptions(); jsonOptions = jsonOptions ?? new JsonHubProtocolOptions();

View File

@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.SignalR.Redis.Tests
.AddRedis(options => .AddRedis(options =>
{ {
// We start the servers before starting redis so we want to time them out ASAP // We start the servers before starting redis so we want to time them out ASAP
options.Options.ConnectTimeout = 1; options.Configuration.ConnectTimeout = 1;
}); });
} }