Пример #1
0
        public RedisPartitionCaching(UraganoSettings uraganoSettings, IServiceProvider serviceProvider, ICodec codec, IConsistentHash <RedisConnection> consistentHash)
        {
            Codec = codec;
            var redisOptions = (RedisOptions)uraganoSettings.CachingOptions;

            ConsistentHash = consistentHash;
            var policy = serviceProvider.GetService <Func <string, IEnumerable <RedisConnection>, RedisConnection> >();

            if (policy == null)
            {
                foreach (var item in redisOptions.ConnectionStrings)
                {
                    ConsistentHash.AddNode(item, item.ToString());
                }
                policy = (key, connections) => ConsistentHash.GetNodeForKey(key);
            }

            string NodeRule(string key)
            {
                var connection = policy(key, redisOptions.ConnectionStrings);

                return($"{connection.Host}:{connection.Port}/{connection.DefaultDatabase}");
            }

            RedisHelper.Initialization(new CSRedis.CSRedisClient(NodeRule, redisOptions.ConnectionStrings.Select(p => p.ToString()).ToArray()));
            Cache = new Microsoft.Extensions.Caching.Redis.CSRedisCache(RedisHelper.Instance);
        }
Пример #2
0
 public TimerWorkerService(
     IConsistentHash <Node> hash,
     IEventThreadRepository eventThreadRepository,
     IEventRepository eventRepository,
     IWorkerRepository workerRepository,
     ILogger <TimerWorkerService> logger,
     IOptions <Node> settings) : base(hash, eventThreadRepository, eventRepository, workerRepository, logger,
                                      settings)
 {
 }
Пример #3
0
 public ReactiveWorkerService(IConsistentHash <Node> hash, IEventThreadRepository eventThreadRepository,
                              IEventRepository eventRepository, IWorkerRepository workerRepository, ILogger <ReactiveWorkerService> logger,
                              IOptions <Node> settings) : base(hash, eventThreadRepository, eventRepository, workerRepository, logger,
                                                               settings)
 {
     _scheduler = new NewThreadScheduler(ts => new Thread(ts)
     {
         Name = "Emitter scheduler"
     });
     _subject = new BehaviorSubject <IEnumerable <int> >(Enumerable.Empty <int>());
 }
Пример #4
0
 public WorkerService(
     IConsistentHash <Node> hash,
     IEventThreadRepository eventThreadRepository,
     IEventRepository eventRepository,
     IWorkerRepository workerRepository,
     ILogger logger,
     IOptions <Node> settings)
 {
     _hash = hash;
     _eventThreadRepository = eventThreadRepository;
     _eventRepository       = eventRepository;
     _workerRepository      = workerRepository;
     Logger     = logger;
     _settings  = settings.Value;
     NodeHashes = new List <int>();
 }