public void AtomicCommonTest() { Redial.RedialManager.RedisRedialManager manager = new Redial.RedialManager.RedisRedialManager("localhost", "", null); manager.Redis.FlushDb(); RedisAtomicExecutor executor = new RedisAtomicExecutor(manager); Task.Factory.StartNew(() => { executor.Execute("test", () => { for (int i = 0; i < 5; ++i) { Thread.Sleep(1000); } }); }); Thread.Sleep(500); var result = manager.Redis.HashGetAll(RedisAtomicExecutor.GetSetKey()); Assert.IsTrue(result.Length == 1); Assert.IsTrue(result[0].Key.StartsWith("test")); Thread.Sleep(5 * 1000); result = manager.Redis.HashGetAll(RedisAtomicExecutor.GetSetKey()); Assert.IsTrue(result.Length == 0); }
public RedisRedialManager(string host, string password, ILog logger) { Logger = logger; if (!string.IsNullOrEmpty(host)) { RedisHost = host; } else { throw new RedialException("Redis host should not be null."); } if (!string.IsNullOrEmpty(password)) { Password = password; } else { Password = null; } Redis = new RedisServer(host, 6379, password); Redis.Db = 3; AtomicExecutor = new RedisAtomicExecutor(this); }
public RedisRedialManager(IDatabase db, INetworkValidater validater, IRedialer redialer, ILogService logger) { Logger = logger; Db = db; AtomicExecutor = new RedisAtomicExecutor(this); NetworkValidater = validater; Redialer = redialer; }
public RedisRedialManager(string host, string password, INetworkValidater validater, IRedialer redialer, ILogService logger) { Logger = logger; if (!string.IsNullOrEmpty(host)) { RedisHost = host; } else { throw new RedialException("Redis host should not be null."); } if (!string.IsNullOrEmpty(password)) { Password = password; } else { Password = null; } var confiruation = new ConfigurationOptions() { ServiceName = "DotnetSpider", Password = password, ConnectTimeout = 5000, KeepAlive = 8, ConnectRetry = 20, SyncTimeout = 65530, ResponseTimeout = 65530 }; #if NET_CORE if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { // Lewis: This is a Workaround for .NET CORE can't use EndPoint to create Socket. var address = Dns.GetHostAddressesAsync(host).Result.FirstOrDefault(); if (address == null) { throw new Exception("Can't resovle your host: " + host); } confiruation.EndPoints.Add(new IPEndPoint(address, 6379)); } else { confiruation.EndPoints.Add(new DnsEndPoint(host, 6379)); } #else confiruation.EndPoints.Add(new DnsEndPoint(host, 6379)); #endif var redis = ConnectionMultiplexer.Connect(confiruation); Db = redis.GetDatabase(3); AtomicExecutor = new RedisAtomicExecutor(this); NetworkValidater = validater; Redialer = redialer; }
public void ClearTimeoutTest2() { var manager = new Redial.RedialManager.RedisRedialManager("localhost", null, null); manager.Redis.FlushDb(); manager.Redialer = new TestRedial(); manager.Redis.HashSet(RedisAtomicExecutor.GetSetKey(), Redial.RedialManager.RedisRedialManager.Locker, DateTime.Now.AddHours(-1).ToString("yyyy-MM-dd HH:mm")); RedisAtomicExecutor executor = new RedisAtomicExecutor(manager); Task.Factory.StartNew(() => { executor.Execute("test1", () => { for (int i = 0; i < 5; ++i) { Thread.Sleep(1000); } }); }); Task.Factory.StartNew(() => { executor.Execute("test2", () => { for (int i = 0; i < 5; ++i) { Thread.Sleep(1000); } }); }); Task.Factory.StartNew(() => { executor.Execute("test3", () => { for (int i = 0; i < 5; ++i) { Thread.Sleep(1000); } }); }); DateTime time1 = DateTime.Now; manager.Redial(); DateTime time2 = DateTime.Now; Assert.IsTrue((time2 - time1).Seconds > 4); }
public void RedialTest() { var manager = new Redial.RedialManager.RedisRedialManager("localhost", null, null); manager.Redis.FlushDb(); manager.Redialer = new TestRedial(); RedisAtomicExecutor executor = new RedisAtomicExecutor(manager); Task.Factory.StartNew(() => { executor.Execute("test1", () => { for (int i = 0; i < 5; ++i) { Thread.Sleep(1000); } }); }); Task.Factory.StartNew(() => { executor.Execute("test2", () => { for (int i = 0; i < 5; ++i) { Thread.Sleep(1000); } }); }); Task.Factory.StartNew(() => { executor.Execute("test3", () => { for (int i = 0; i < 5; ++i) { Thread.Sleep(1000); } }); }); DateTime time1 = DateTime.Now; manager.Redial(); DateTime time2 = DateTime.Now; Assert.IsTrue((time2 - time1).Seconds > 4); }