Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
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);
        }
Exemplo n.º 3
0
        public RedisRedialManager(IDatabase db, INetworkValidater validater, IRedialer redialer, ILogService logger)
        {
            Logger = logger;

            Db               = db;
            AtomicExecutor   = new RedisAtomicExecutor(this);
            NetworkValidater = validater;
            Redialer         = redialer;
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }