Skip to content

Commit 6cf942c

Browse files
authored
Merge pull request #76 from cnblogs/improvement-for-issue-70
Resolve hostname to IP address in MemcachedClientConfiguration
2 parents 9aae92d + 516145b commit 6cf942c

File tree

4 files changed

+47
-16
lines changed

4 files changed

+47
-16
lines changed

Enyim.Caching/Configuration/MemcachedClientConfiguration.cs

+35-8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
using Microsoft.Extensions.Logging;
88
using Microsoft.Extensions.Options;
99
using Microsoft.Extensions.Configuration;
10+
using System.Linq;
11+
using System.Net.Sockets;
1012

1113
namespace Enyim.Caching.Configuration
1214
{
@@ -41,23 +43,19 @@ public MemcachedClientConfiguration(
4143
var options = optionsAccessor.Value;
4244
if ((options == null || options.Servers.Count == 0) && configuration != null)
4345
{
44-
var section = configuration.GetSection("enyimMemcached");
46+
var section = configuration.GetSection("enyimMemcached");
4547
if (section.Exists())
4648
{
47-
section.Bind(options);
49+
section.Bind(options);
4850
}
4951
else
5052
{
5153
_logger.LogWarning($"No enyimMemcached setting in appsetting.json. Use default configuration");
5254
options.AddDefaultServer();
53-
}
55+
}
5456
}
5557

56-
Servers = new List<DnsEndPoint>();
57-
foreach (var server in options.Servers)
58-
{
59-
Servers.Add(new DnsEndPoint(server.Address, server.Port));
60-
}
58+
ConfigureServers(options);
6159

6260
SocketPool = new SocketPoolConfiguration();
6361
if (options.SocketPool != null)
@@ -172,6 +170,35 @@ public MemcachedClientConfiguration(
172170
}
173171
}
174172

173+
private void ConfigureServers(MemcachedClientOptions options)
174+
{
175+
Servers = new List<DnsEndPoint>();
176+
foreach (var server in options.Servers)
177+
{
178+
if (!IPAddress.TryParse(server.Address, out var address))
179+
{
180+
var ip = Dns.GetHostAddresses(server.Address)
181+
.FirstOrDefault(i => i.AddressFamily == AddressFamily.InterNetwork)?.ToString();
182+
183+
if (ip == null)
184+
{
185+
_logger.LogError($"Could not resolve host '{server.Address}'.");
186+
}
187+
else
188+
{
189+
_logger.LogInformation($"Memcached server address - {server.Address }({ip}):{server.Port}");
190+
server.Address = ip;
191+
}
192+
}
193+
else
194+
{
195+
_logger.LogInformation($"Memcached server address - {server.Address }:{server.Port}");
196+
}
197+
198+
Servers.Add(new DnsEndPoint(server.Address, server.Port));
199+
}
200+
}
201+
175202
/// <summary>
176203
/// Adds a new server to the pool.
177204
/// </summary>

Enyim.Caching/EnyimMemcachedApplicationBuilderExtensions.cs

+10-6
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,27 @@
55
using System.Threading.Tasks;
66
using Microsoft.Extensions.DependencyInjection;
77
using Microsoft.Extensions.Logging;
8+
using Enyim.Caching.Configuration;
9+
using Enyim.Caching.Memcached;
810

911
namespace Microsoft.AspNetCore.Builder
1012
{
1113
public static class EnyimMemcachedApplicationBuilderExtensions
1214
{
1315
public static IApplicationBuilder UseEnyimMemcached(this IApplicationBuilder app)
1416
{
17+
var logger = app.ApplicationServices.GetService<ILogger<IMemcachedClient>>();
1518
try
1619
{
17-
app.ApplicationServices.GetService<IMemcachedClient>()
18-
.GetAsync<string>("EnyimMemcached").Wait();
19-
Console.WriteLine("EnyimMemcached Started.");
20-
} catch (Exception ex)
20+
var client = app.ApplicationServices.GetRequiredService<IMemcachedClient>();
21+
client.GetValueAsync<string>("UseEnyimMemcached").Wait();
22+
Console.WriteLine("EnyimMemcached connected memcached servers.");
23+
}
24+
catch (Exception ex)
2125
{
22-
app.ApplicationServices.GetService<ILogger<IMemcachedClient>>()
23-
.LogError(new EventId(), ex, "EnyimMemcached Failed.");
26+
logger.LogError(ex, "Failed in UseEnyimMemcached");
2427
}
28+
2529
return app;
2630
}
2731
}

Enyim.Caching/EnyimMemcachedServiceCollectionExtensions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ private static IServiceCollection AddEnyimMemcachedInternal(IServiceCollection s
8686
services.TryAddSingleton<ITranscoder, DefaultTranscoder>();
8787
services.TryAddSingleton<IMemcachedKeyTransformer, DefaultKeyTransformer>();
8888
services.TryAddTransient<IMemcachedClientConfiguration, MemcachedClientConfiguration>();
89-
services.AddSingleton<MemcachedClient, MemcachedClient>();
89+
services.AddSingleton<MemcachedClient>();
9090

9191
services.AddSingleton<IMemcachedClient>(factory => factory.GetService<MemcachedClient>());
9292
services.AddSingleton<IDistributedCache>(factory => factory.GetService<MemcachedClient>());

MemcachedTest/MemcachedClientTest.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ protected virtual MemcachedClient GetClient(MemcachedProtocol protocol = Memcach
3434
services.AddSingleton<ITranscoder,BinaryFormatterTranscoder>();
3535
}
3636

37-
services.AddLogging(builder => builder.SetMinimumLevel(LogLevel.Debug).AddConsole());
37+
services.AddLogging(builder => builder.SetMinimumLevel(LogLevel.Information).AddConsole());
3838

3939
IServiceProvider serviceProvider = services.BuildServiceProvider();
4040
var client = serviceProvider.GetService<IMemcachedClient>() as MemcachedClient;

0 commit comments

Comments
 (0)