Skip to content

Commit c5b487b

Browse files
committed
optimization code
1 parent bb1346c commit c5b487b

File tree

4 files changed

+58
-63
lines changed

4 files changed

+58
-63
lines changed

src/Surging.Core/Surging.Core.CPlatform/ContainerBuilderExtensions.cs

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public static class ContainerBuilderExtensions
8787
{
8888
private static List<Assembly> _referenceAssembly = new List<Assembly>();
8989
private static List<AbstractModule> _modules = new List<AbstractModule>();
90+
9091
/// <summary>
9192
/// 添加Json序列化支持。
9293
/// </summary>
@@ -486,7 +487,7 @@ public static IServiceBuilder RegisterServices(this IServiceBuilder builder, par
486487
try
487488
{
488489
var services = builder.Services;
489-
var referenceAssemblies = GetReferenceAssembly(virtualPaths);
490+
var referenceAssemblies = GetAssemblies(virtualPaths);
490491
foreach (var assembly in referenceAssemblies)
491492
{
492493
services.RegisterAssemblyTypes(assembly)
@@ -527,7 +528,7 @@ public static IServiceBuilder RegisterServiceBus
527528
(this IServiceBuilder builder, params string[] virtualPaths)
528529
{
529530
var services = builder.Services;
530-
var referenceAssemblies = GetReferenceAssembly(virtualPaths);
531+
var referenceAssemblies = GetAssemblies(virtualPaths);
531532

532533
foreach (var assembly in referenceAssemblies)
533534
{
@@ -548,7 +549,7 @@ public static IServiceBuilder RegisterRepositories
548549
(this IServiceBuilder builder, params string[] virtualPaths)
549550
{
550551
var services = builder.Services;
551-
var referenceAssemblies = GetReferenceAssembly(virtualPaths);
552+
var referenceAssemblies = GetAssemblies(virtualPaths);
552553

553554
foreach (var assembly in referenceAssemblies)
554555
{
@@ -562,19 +563,7 @@ public static IServiceBuilder RegisterModules(
562563
this IServiceBuilder builder, params string[] virtualPaths)
563564
{
564565
var services = builder.Services;
565-
List<Assembly> referenceAssemblies = new List<Assembly>();
566-
if (virtualPaths.Any())
567-
{
568-
referenceAssemblies = GetReferenceAssembly(virtualPaths);
569-
}
570-
else
571-
{
572-
string[] assemblyNames = DependencyContext
573-
.Default.GetDefaultAssemblyNames().Select(p => p.Name).ToArray();
574-
assemblyNames = GetFilterAssemblies(assemblyNames);
575-
foreach (var name in assemblyNames)
576-
referenceAssemblies.Add(Assembly.Load(name));
577-
}
566+
var referenceAssemblies = GetAssemblies(virtualPaths);
578567
if (builder == null) throw new ArgumentNullException("builder");
579568
var packages = ConvertDictionary(AppConfig.ServerOptions.Packages);
580569
foreach (var moduleAssembly in referenceAssemblies)
@@ -614,11 +603,11 @@ public static IEnumerable<string> GetDataContractName(this IServiceBuilder build
614603
{
615604
var namespaces = new List<string>();
616605
var assemblies = builder.GetInterfaceService()
617-
.Select(p=>p.Assembly)
606+
.Select(p => p.Assembly)
618607
.Union(GetSystemModules())
619608
.Distinct()
620609
.ToList();
621-
610+
622611
assemblies.ForEach(assembly =>
623612
{
624613
namespaces.AddRange(assembly.GetTypes().Where(t => t.GetCustomAttribute<DataContractAttribute>() != null).Select(n => n.Namespace));
@@ -628,7 +617,7 @@ public static IEnumerable<string> GetDataContractName(this IServiceBuilder build
628617

629618
private static IDictionary<string, string> ConvertDictionary(List<ModulePackage> list)
630619
{
631-
var result = new Dictionary<string, string>();
620+
var result = new Dictionary<string, string>();
632621
list.ForEach(p =>
633622
{
634623
result.Add(p.TypeName, p.Using);
@@ -651,15 +640,15 @@ private static List<Assembly> GetReferenceAssembly(params string[] virtualPaths)
651640
paths.ForEach(path =>
652641
{
653642
var assemblyFiles = GetAllAssemblyFiles(path);
654-
643+
655644
foreach (var referencedAssemblyFile in assemblyFiles)
656645
{
657646
var referencedAssembly = Assembly.LoadFrom(referencedAssemblyFile);
658647
if (!_referenceAssembly.Contains(referencedAssembly))
659648
_referenceAssembly.Add(referencedAssembly);
660649
refAssemblies.Add(referencedAssembly);
661650
}
662-
result = existsPath ? refAssemblies: _referenceAssembly;
651+
result = existsPath ? refAssemblies : _referenceAssembly;
663652
});
664653
}
665654
return result;
@@ -672,14 +661,33 @@ private static List<Assembly> GetSystemModules()
672661
foreach (var referenceAssembly in referenceAssemblies)
673662
{
674663
var abstractModules = GetAbstractModules(referenceAssembly);
675-
if(abstractModules.Any(p =>p.GetType().IsSubclassOf(typeof(SystemModule))))
664+
if (abstractModules.Any(p => p.GetType().IsSubclassOf(typeof(SystemModule))))
676665
{
677666
assemblies.Add(referenceAssembly);
678667
}
679668
}
680669
return assemblies;
681670
}
682671

672+
private static List<Assembly> GetAssemblies(params string[] virtualPaths)
673+
{
674+
var referenceAssemblies = new List<Assembly>();
675+
if (virtualPaths.Any())
676+
{
677+
referenceAssemblies = GetReferenceAssembly(virtualPaths);
678+
}
679+
else
680+
{
681+
string[] assemblyNames = DependencyContext
682+
.Default.GetDefaultAssemblyNames().Select(p => p.Name).ToArray();
683+
assemblyNames = GetFilterAssemblies(assemblyNames);
684+
foreach (var name in assemblyNames)
685+
referenceAssemblies.Add(Assembly.Load(name));
686+
_referenceAssembly.AddRange(referenceAssemblies.Except(_referenceAssembly));
687+
}
688+
return referenceAssemblies;
689+
}
690+
683691
private static List<AbstractModule> GetAbstractModules(Assembly assembly)
684692
{
685693
var abstractModules = new List<AbstractModule>();
@@ -694,9 +702,9 @@ private static List<AbstractModule> GetAbstractModules(Assembly assembly)
694702
return abstractModules;
695703
}
696704

697-
private static string[] GetFilterAssemblies(string[] assemblyNames)
705+
private static string[] GetFilterAssemblies(string[] assemblyNames)
698706
{
699-
var notRelatedFile = AppConfig.ServerOptions.NotRelatedAssemblyFiles;
707+
var notRelatedFile = AppConfig.ServerOptions.NotRelatedAssemblyFiles;
700708
var relatedFile = AppConfig.ServerOptions.RelatedAssemblyFiles;
701709
var pattern = string.Format("^Microsoft.\\w*|^System.\\w*|^DotNetty.\\w*|^runtime.\\w*|^ZooKeeperNetEx\\w*|^StackExchange.Redis\\w*|^Consul\\w*|^Newtonsoft.Json.\\w*|^Autofac.\\w*{0}",
702710
string.IsNullOrEmpty(notRelatedFile) ? "" : $"|{notRelatedFile}");
@@ -713,7 +721,7 @@ private static string[] GetFilterAssemblies(string[] assemblyNames)
713721
return
714722
assemblyNames.Where(
715723
name => !notRelatedRegex.IsMatch(name)).ToArray();
716-
}
724+
}
717725
}
718726

719727
private static List<string> GetAllAssemblyFiles(string parentDir)
@@ -734,7 +742,7 @@ private static List<string> GetAllAssemblyFiles(string parentDir)
734742
{
735743
return
736744
Directory.GetFiles(parentDir, "*.dll").Select(Path.GetFullPath).Where(
737-
a => !notRelatedRegex.IsMatch(a)).ToList();
745+
a => !notRelatedRegex.IsMatch(Path.GetFileName(a))).ToList();
738746
}
739747
}
740748
}

src/Surging.Core/Surging.Core.Caching/AddressResolvers/Implementation/DefaultAddressResolver.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,11 @@ private void ServiceCacheManager_Removed(object sender, ServiceCacheEventArgs e)
102102
if (hash != null)
103103
foreach (var node in e.Cache.CacheEndpoint)
104104
{
105-
var hashNode = node as ConsistentHashNode;
106-
hash.Remove(hashNode);
107-
hash.Add(hashNode);
105+
106+
var hashNode = node as ConsistentHashNode;
107+
var addr = string.Format("{0}:{1}", hashNode.Host, hashNode.Port);
108+
hash.Remove(addr);
109+
hash.Add(hashNode, addr);
108110
}
109111
}
110112
}
@@ -122,8 +124,9 @@ private void ServiceCacheManager_Add(object sender, ServiceCacheEventArgs e)
122124
foreach (var node in e.Cache.CacheEndpoint)
123125
{
124126
var hashNode = node as ConsistentHashNode;
125-
hash.Remove(hashNode);
126-
hash.Add(hashNode);
127+
var addr = string.Format("{0}:{1}", hashNode.Host, hashNode.Port);
128+
hash.Remove(addr);
129+
hash.Add(hashNode, addr);
127130
}
128131
}
129132
}

src/Surging.Core/Surging.Core.Caching/HashAlgorithms/ConsistentHash.cs

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,6 @@ public int VirtualNodeReplicationFactor
4646
}
4747
#endregion
4848

49-
/// <summary>
50-
/// 初始化节点服务器
51-
/// </summary>
52-
/// <param name="nodes">节点</param>
53-
/// <remarks>
54-
/// <para>创建:范亮</para>
55-
/// <para>日期:2016/4/2</para>
56-
/// </remarks>
57-
public void Initialize(IEnumerable<T> nodes)
58-
{
59-
foreach (var node in nodes)
60-
{
61-
AddNode(node);
62-
}
63-
_nodeKeysInRing = _ring.Keys.ToArray();
64-
}
6549

6650
/// <summary>
6751
/// 添加节点
@@ -71,12 +55,17 @@ public void Initialize(IEnumerable<T> nodes)
7155
/// <para>创建:范亮</para>
7256
/// <para>日期:2016/4/2</para>
7357
/// </remarks>
74-
public void Add(T node)
58+
public void Add(T node, string value)
7559
{
76-
AddNode(node);
60+
AddNode(node, value);
7761
_nodeKeysInRing = _ring.Keys.ToArray();
7862
}
7963

64+
public IEnumerable<T> GetNodes()
65+
{
66+
return _ring.Values.Distinct().ToList();
67+
}
68+
8069
/// <summary>
8170
/// 删除节点
8271
/// </summary>
@@ -85,7 +74,7 @@ public void Add(T node)
8574
/// <para>创建:范亮</para>
8675
/// <para>日期:2016/4/2</para>
8776
/// </remarks>
88-
public void Remove(T node)
77+
public void Remove(string node)
8978
{
9079
RemoveNode(node);
9180
_nodeKeysInRing = _ring.Keys.ToArray();
@@ -107,11 +96,6 @@ public T GetItemNode(string item)
10796
return _ring[_nodeKeysInRing[nearestNodePosition]];
10897
}
10998

110-
public IEnumerable<T> GetNodes()
111-
{
112-
return _ring.Values.Distinct().ToList();
113-
}
114-
11599
/// <summary>
116100
/// 添加节点
117101
/// </summary>
@@ -120,11 +104,11 @@ public IEnumerable<T> GetNodes()
120104
/// <para>创建:范亮</para>
121105
/// <para>日期:2016/4/2</para>
122106
/// </remarks>
123-
private void AddNode(T node)
107+
private void AddNode(T node, string value)
124108
{
125109
for (var i = 0; i < _virtualNodeReplicationFactor; i++)
126110
{
127-
var hashOfVirtualNode = _hashAlgorithm.Hash(node.GetHashCode().ToString(CultureInfo.InvariantCulture) + i);
111+
var hashOfVirtualNode = _hashAlgorithm.Hash(value.ToString(CultureInfo.InvariantCulture) + i);
128112
_ring[hashOfVirtualNode] = node;
129113
}
130114
}
@@ -137,13 +121,12 @@ private void AddNode(T node)
137121
/// <para>创建:范亮</para>
138122
/// <para>日期:2016/4/2</para>
139123
/// </remarks>
140-
private void RemoveNode(T node)
124+
private void RemoveNode(string value)
141125
{
142126
for (var i = 0; i < _virtualNodeReplicationFactor; i++)
143127
{
144-
var hashOfVirtualNode = _hashAlgorithm.Hash(node.GetHashCode().ToString() + i);
145-
if (_ring.ContainsKey(hashOfVirtualNode))
146-
_ring.Remove(hashOfVirtualNode);
128+
var hashOfVirtualNode = _hashAlgorithm.Hash(value.ToString() + i);
129+
_ring.Remove(hashOfVirtualNode);
147130
}
148131
}
149132

src/Surging.Core/Surging.Core.Caching/RedisCache/RedisContext.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ private void InitSettingHashStorage()
206206
{
207207
db = dbs[dbs.Length - 1];
208208
}
209-
hash.Add(new ConsistentHashNode()
209+
var node = new ConsistentHashNode()
210210
{
211211
Type = targetType,
212212
Host = endpoints[0],
@@ -216,7 +216,8 @@ private void InitSettingHashStorage()
216216
MaxSize = this._maxSize,
217217
MinSize = this._minSize,
218218
Db = db.ToString()
219-
});
219+
};
220+
hash.Add(node,string.Format("{0}:{1}",node.Host,node.Port));
220221
dicHash.GetOrAdd(targetType.ToString(), hash);
221222
});
222223
}

0 commit comments

Comments
 (0)