refactoring: ICacheNotify<T> map to MemoryCacheNotify by default then RedisConfiguration is null
This commit is contained in:
parent
5bd347a775
commit
986d1d49e6
@ -23,6 +23,7 @@ using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http.Extensions;
|
||||
using Microsoft.AspNetCore.HttpOverrides;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Authorization;
|
||||
@ -103,7 +104,18 @@ namespace ASC.Api.Core
|
||||
DIHelper.TryAdd<CookieAuthHandler>();
|
||||
DIHelper.TryAdd<WebhooksGlobalFilterAttribute>();
|
||||
|
||||
var redisConfiguration = Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
DIHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
DIHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
|
||||
DIHelper.TryAdd(typeof(IWebhookPublisher), typeof(WebhookPublisher));
|
||||
|
||||
if (LoadProducts)
|
||||
|
@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@ -24,8 +23,6 @@ namespace ASC.Common.Caching
|
||||
private ILog Log { get; set; }
|
||||
private ConcurrentDictionary<string, CancellationTokenSource> Cts { get; set; }
|
||||
private ConcurrentDictionary<string, Action<T>> Actions { get; set; }
|
||||
private MemoryCacheNotify<T> MemoryCacheNotify { get; set; }
|
||||
private string ChannelName { get; } = $"ascchannel{typeof(T).Name}";
|
||||
private ProtobufSerializer<T> ValueSerializer { get; } = new ProtobufSerializer<T>();
|
||||
private ProtobufDeserializer<T> ValueDeserializer { get; } = new ProtobufDeserializer<T>();
|
||||
private ProtobufSerializer<AscCacheItem> KeySerializer { get; } = new ProtobufSerializer<AscCacheItem>();
|
||||
@ -41,26 +38,13 @@ namespace ASC.Common.Caching
|
||||
Key = Guid.NewGuid();
|
||||
|
||||
var settings = configuration.GetSetting<KafkaSettings>("kafka");
|
||||
if (settings != null && !string.IsNullOrEmpty(settings.BootstrapServers))
|
||||
{
|
||||
|
||||
ClientConfig = new ClientConfig { BootstrapServers = settings.BootstrapServers };
|
||||
AdminClientConfig = new AdminClientConfig { BootstrapServers = settings.BootstrapServers };
|
||||
}
|
||||
else
|
||||
{
|
||||
MemoryCacheNotify = new MemoryCacheNotify<T>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void Publish(T obj, CacheNotifyAction cacheNotifyAction)
|
||||
{
|
||||
if (ClientConfig == null)
|
||||
{
|
||||
MemoryCacheNotify.Publish(obj, cacheNotifyAction);
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (Producer == null)
|
||||
@ -102,12 +86,8 @@ namespace ASC.Common.Caching
|
||||
|
||||
public void Subscribe(Action<T> onchange, CacheNotifyAction cacheNotifyAction)
|
||||
{
|
||||
if (ClientConfig == null)
|
||||
{
|
||||
MemoryCacheNotify.Subscribe(onchange, cacheNotifyAction);
|
||||
return;
|
||||
}
|
||||
var channelName = GetChannelName(cacheNotifyAction);
|
||||
|
||||
Cts[channelName] = new CancellationTokenSource();
|
||||
Actions[channelName] = onchange;
|
||||
|
||||
@ -189,7 +169,7 @@ namespace ASC.Common.Caching
|
||||
|
||||
private string GetChannelName(CacheNotifyAction cacheNotifyAction)
|
||||
{
|
||||
return $"{ChannelName}{cacheNotifyAction}";
|
||||
return $"asc:channel:{cacheNotifyAction}:{typeof(T).FullName}".ToLower();
|
||||
}
|
||||
|
||||
public void Unsubscribe(CacheNotifyAction action)
|
||||
@ -231,40 +211,4 @@ namespace ASC.Common.Caching
|
||||
{
|
||||
public string BootstrapServers { get; set; }
|
||||
}
|
||||
|
||||
public class MemoryCacheNotify<T> : ICacheNotify<T> where T : IMessage<T>, new()
|
||||
{
|
||||
private readonly Dictionary<string, List<Action<T>>> actions = new Dictionary<string, List<Action<T>>>();
|
||||
|
||||
public void Publish(T obj, CacheNotifyAction action)
|
||||
{
|
||||
if (actions.TryGetValue(GetKey(action), out var onchange) && onchange != null)
|
||||
{
|
||||
foreach (var a in onchange)
|
||||
{
|
||||
a(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Subscribe(Action<T> onchange, CacheNotifyAction notifyAction)
|
||||
{
|
||||
if (onchange != null)
|
||||
{
|
||||
var key = GetKey(notifyAction);
|
||||
actions.TryAdd(key, new List<Action<T>>());
|
||||
actions[key].Add(onchange);
|
||||
}
|
||||
}
|
||||
|
||||
public void Unsubscribe(CacheNotifyAction action)
|
||||
{
|
||||
actions.Remove(GetKey(action));
|
||||
}
|
||||
|
||||
private string GetKey(CacheNotifyAction cacheNotifyAction)
|
||||
{
|
||||
return $"{typeof(T).Name}{cacheNotifyAction}";
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Google.Protobuf;
|
||||
|
||||
@ -20,10 +21,7 @@ namespace ASC.Common.Caching
|
||||
{
|
||||
if (_actions.TryGetValue(GetKey(action), out var onchange) && onchange != null)
|
||||
{
|
||||
foreach (var a in onchange)
|
||||
{
|
||||
a(obj);
|
||||
}
|
||||
Parallel.ForEach(onchange, a => a(obj));
|
||||
}
|
||||
}
|
||||
|
||||
@ -44,7 +42,7 @@ namespace ASC.Common.Caching
|
||||
|
||||
private string GetKey(CacheNotifyAction cacheNotifyAction)
|
||||
{
|
||||
return $"{typeof(T).Name}{cacheNotifyAction}";
|
||||
return $"asc:channel:{cacheNotifyAction}:{typeof(T).FullName}".ToLower();
|
||||
}
|
||||
}
|
||||
}
|
@ -75,7 +75,17 @@ namespace ASC.ApiSystem
|
||||
|
||||
services.AddMemoryCache();
|
||||
|
||||
var redisConfiguration = Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
diHelper.TryAdd<AuthHandler>();
|
||||
diHelper.TryAdd<CalDavController>();
|
||||
diHelper.TryAdd<PortalController>();
|
||||
|
@ -41,6 +41,7 @@ using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
using StackExchange.Redis.Extensions.Core.Configuration;
|
||||
|
||||
namespace ASC.Thumbnails.Svc
|
||||
{
|
||||
@ -83,7 +84,17 @@ namespace ASC.Thumbnails.Svc
|
||||
services.AddMemoryCache();
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
services.AddHostedService<ClearEventsServiceLauncher>();
|
||||
diHelper.TryAdd<ClearEventsServiceLauncher>();
|
||||
})
|
||||
|
@ -69,7 +69,17 @@ namespace ASC.Data.Storage.Migration
|
||||
{
|
||||
services.AddMemoryCache();
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
diHelper.RegisterProducts(hostContext.Configuration, hostContext.HostingEnvironment.ContentRootPath);
|
||||
|
||||
|
@ -72,7 +72,17 @@ namespace ASC.Notify
|
||||
services.AddMemoryCache();
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
diHelper.RegisterProducts(hostContext.Configuration, hostContext.HostingEnvironment.ContentRootPath);
|
||||
|
||||
services.Configure<NotifyServiceCfg>(hostContext.Configuration.GetSection("notify"));
|
||||
|
@ -94,7 +94,18 @@ public class Program
|
||||
{
|
||||
services.AddMemoryCache();
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
diHelper.RegisterProducts(hostContext.Configuration, hostContext.HostingEnvironment.ContentRootPath);
|
||||
|
||||
services.AddHostedService<RadicaleServiceLauncher>();
|
||||
|
@ -94,7 +94,18 @@ public class Program
|
||||
{
|
||||
services.AddMemoryCache();
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
diHelper.RegisterProducts(hostContext.Configuration, hostContext.HostingEnvironment.ContentRootPath);
|
||||
|
||||
services.AddHostedService<SocketServiceLauncher>();
|
||||
|
@ -95,7 +95,18 @@ public class Program
|
||||
{
|
||||
services.AddMemoryCache();
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
diHelper.RegisterProducts(hostContext.Configuration, hostContext.HostingEnvironment.ContentRootPath);
|
||||
|
||||
services.AddHostedService<Launcher>();
|
||||
|
@ -72,7 +72,18 @@ namespace ASC.Studio.Notify
|
||||
{
|
||||
services.AddMemoryCache();
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
diHelper.RegisterProducts(hostContext.Configuration, hostContext.HostingEnvironment.ContentRootPath);
|
||||
services.AddHostedService<ServiceLauncher>();
|
||||
diHelper.TryAdd<ServiceLauncher>();
|
||||
|
@ -95,7 +95,17 @@ public class Program
|
||||
services.AddMemoryCache();
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
services.AddHostedService<ThumbnailsServiceLauncher>();
|
||||
diHelper.TryAdd<ThumbnailsServiceLauncher>();
|
||||
|
||||
|
@ -70,7 +70,16 @@ namespace ASC.Webhooks.Service
|
||||
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
diHelper.TryAdd<DbWorker>();
|
||||
|
||||
|
@ -1,14 +1,5 @@
|
||||
{
|
||||
"Redis": {
|
||||
"Ssl": false,
|
||||
"ConnectTimeout": 5000,
|
||||
"SyncTimeout": 60000,
|
||||
"ConnectRetry": 2,
|
||||
"Database": 0,
|
||||
"Hosts": [
|
||||
{
|
||||
"Host": "127.0.0.1",
|
||||
"Port": "6379"
|
||||
}]
|
||||
|
||||
}
|
||||
}
|
@ -71,7 +71,16 @@ namespace ASC.CRM.BackgroundTasks
|
||||
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
diHelper.RegisterProducts(hostContext.Configuration, hostContext.HostingEnvironment.ContentRootPath);
|
||||
|
||||
|
@ -76,7 +76,16 @@ namespace ASC.Files.Service
|
||||
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
var redisConfiguration = hostContext.Configuration.GetSection("Redis").Get<RedisConfiguration>();
|
||||
|
||||
if (redisConfiguration != null)
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(RedisCache<>));
|
||||
}
|
||||
else
|
||||
{
|
||||
diHelper.TryAdd(typeof(ICacheNotify<>), typeof(MemoryCacheNotify<>));
|
||||
}
|
||||
|
||||
diHelper.RegisterProducts(hostContext.Configuration, hostContext.HostingEnvironment.ContentRootPath);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user