Exemplo n.º 1
0
        public void TestAll()
        {
            var mq    = new SenparcMessageQueue();
            var count = mq.GetCount();
            var key   = DateTime.Now.Ticks.ToString();

            //Test Add()
            var item = mq.Add(key, () => WeixinTrace.Log("测试SenparcMessageQueue写入Key=A"));

            Assert.AreEqual(count + 1, mq.GetCount());
            //var hashCode = item.GetHashCode();

            //Test GetCurrentKey()
            var currentKey = mq.GetCurrentKey();

            Assert.AreEqual(key, currentKey);

            //Test GetItem
            var currentItem = mq.GetItem(currentKey);

            Assert.AreEqual(currentItem.Key, item.Key);
            Assert.AreEqual(currentItem.AddTime, item.AddTime);

            //Test Remove
            mq.Remove(key);
            Assert.AreEqual(count, mq.GetCount());
        }
Exemplo n.º 2
0
        public void ThreadUtilityTest()
        {
            ThreadUtility.Register();
            ThreadUtility.Register();//多次注仍然只记录一次(最早的一次)
            ThreadUtility.Register();

            Assert.AreEqual(1, ThreadUtility.AsynThreadCollection.Count);

            var smq = new SenparcMessageQueue();
            var key = "ThreadUtilityTests";

            smq.Add(key, () =>
            {
                Console.WriteLine("队列执行SenparcMessageQueue");
            });

            //不再需要操作 SenparcMessageQueueThreadUtility.Run(),队列已经会自动处理

            while (smq.GetCount() > 0)
            {
                //执行队列
            }

            Console.WriteLine($"SenparcMessageQueue队列处理完毕,当前项目:{smq.GetCount()}");
        }
Exemplo n.º 3
0
        public void SenparcMessageQueueThreadUtilityTest()
        {
            var smq = new SenparcMessageQueue();
            var key = "SenparcMessageQueueThreadUtilityTest";

            smq.Add(key, () =>
            {
                Console.WriteLine("执行SenparcMessageQueue");
            });

            Console.WriteLine($"SenparcMessageQueue.Count:{smq.GetCount()}");

            var senparcMessageQueue = new SenparcMessageQueueThreadUtility();

            Task.Factory.StartNew(() =>
            {
                senparcMessageQueue.Run();
            });//异步执行

            //
            while (smq.GetCount() > 0)
            {
                //执行队列
            }

            Console.WriteLine($"SenparcMessageQueue队列处理完毕,当前项目:{smq.GetCount()}");
        }
Exemplo n.º 4
0
        public ActionResult RunTest()
        {
            var sb = new StringBuilder();
            var containerCacheStragegy = CacheStrategyFactory.GetContainerCacheStragegyInstance();

            sb.AppendFormat("{0}:{1}<br />", "当前缓存策略", containerCacheStragegy.GetType().Name);


            for (int i = 0; i < 3; i++)
            {
                sb.AppendFormat("<br />====== {0}:{1} ======<br /><br />", "开始一轮测试", i + 1);
                var bagKey = DateTime.Now.Ticks.ToString();
                var bag    = new TestContainerBag1()
                {
                    Key      = bagKey,
                    DateTime = DateTime.Now
                };
                TestContainer1.Update(bagKey, bag);
                sb.AppendFormat("{0}:{1}(Ticks:{2})<br />", "bag.DateTime", bag.DateTime.ToLongTimeString(), bag.DateTime.Ticks);

                Thread.Sleep(1);

                bag.DateTime = DateTime.Now;//进行修改

                //读取列队
                var mq     = new SenparcMessageQueue();
                var mqKey  = SenparcMessageQueue.GenerateKey("ContainerBag", bag.GetType(), bag.Key, "UpdateContainerBag");
                var mqItem = mq.GetItem(mqKey);
                sb.AppendFormat("{0}:{1}(Ticks:{2})<br />", "bag.DateTime", bag.DateTime.ToLongTimeString(), bag.DateTime.Ticks);
                sb.AppendFormat("{0}:{1}<br />", "已经加入列队", mqItem != null);
                sb.AppendFormat("{0}:{1}<br />", "当前消息列队数量(未更新缓存)", mq.GetCount());

                var cacheKey       = TestContainer1.GetCacheKey();
                var itemCollection = containerCacheStragegy.Get(cacheKey);
                sb.AppendFormat("{0}:{1}<br />", "当前缓存是否存在", itemCollection.CheckExisted(bagKey));
                sb.AppendFormat("{0}:{1}<br />", "插入缓存时间", itemCollection[bagKey].CacheTime.Ticks);//应为0

                var waitSeconds = i;
                sb.AppendFormat("{0}:{1}<br />", "操作", "等待" + waitSeconds + "秒");
                Thread.Sleep(waitSeconds * 1000);//线程默认轮询等待时间为2秒
                sb.AppendFormat("{0}:{1}<br />", "当前消息列队数量(未更新缓存)", mq.GetCount());

                itemCollection = containerCacheStragegy.Get(cacheKey);
                sb.AppendFormat("{0}:{1}<br />", "当前缓存是否存在", itemCollection.CheckExisted(bagKey));
                sb.AppendFormat("{0}:{1}(Ticks:{2})<br />", "插入缓存时间", itemCollection[bagKey].CacheTime.ToLongTimeString(), itemCollection[bagKey].CacheTime.Ticks);//应为当前加入到缓存的最新时间
            }

            return(Content(sb.ToString()));
            //ViewData["Result"] = sb.ToString();
            //return View();
        }
Exemplo n.º 5
0
        public void FlushCacheTest()
        {
            var smq = new SenparcMessageQueue();

            using (var flushCache = new FlushCache())
            {
                for (int i = 0; i < 10; i++)
                {
                    smq.Add("测试" + Guid.NewGuid().ToString(), () =>
                    {
                        Console.WriteLine("执行队列:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffffff"));
                    });
                }
            }//立即执行所有队列

            //已经执行完
            Assert.AreEqual(0, smq.GetCount());
        }
Exemplo n.º 6
0
        public void SenparcMessageQueueTest()
        {
            var smq       = new SenparcMessageQueue();
            var keyPrefix = "TestMQ_";
            var count     = smq.GetCount();

            for (int i = 0; i < 3; i++)
            {
                var key = keyPrefix + i;
                //测试Add
                smq.Add(key, () =>
                {
                    Console.WriteLine("执行队列:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ffffff"));
                });


                Console.WriteLine("添加队列项:" + key);
                Console.WriteLine("当前数量:" + smq.GetCount());
                Console.WriteLine("CurrentKey:" + smq.GetCurrentKey());
                Assert.AreEqual(count + 1, smq.GetCount());
                count = smq.GetCount();

                //测试GetItem
                var item = smq.GetItem(key);
                Console.WriteLine("item.AddTime:" + item.AddTime);
                Assert.AreEqual(key, item.Key);
            }

            //测试Remove
            smq.Add("ToRemove", () =>
            {
                Console.WriteLine("如果看到这一条,说明没有清楚成功");
            });
            smq.Remove("ToRemove");

            //启动线程
            ThreadUtility.Register();

            while (smq.GetCount() > 0)
            {
                //等待队列处理完
            }

            Console.WriteLine("队列处理完毕,当前队列数量:" + smq.GetCount());
        }
Exemplo n.º 7
0
        public ActionResult RunTest()
        {
            var sb = new StringBuilder();
            //var containerCacheStrategy = CacheStrategyFactory.GetContainerCacheStrategyInstance();
            var containerCacheStrategy = ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance() /*.ContainerCacheStrategy*/;
            var baseCacheStrategy      = containerCacheStrategy.BaseCacheStrategy();

            sb.AppendFormat("{0}:{1}<br />", "当前缓存策略", containerCacheStrategy.GetType().Name);

            var finalExisted = false;

            for (int i = 0; i < 3; i++)
            {
                sb.AppendFormat("<br />====== {0}:{1} ======<br /><br />", "开始一轮测试", i + 1);
                var shortBagKey = SystemTime.Now.ToString("yyyyMMdd-HHmmss");
                var finalBagKey = baseCacheStrategy.GetFinalKey(ContainerHelper.GetItemCacheKey(typeof(TestContainerBag1), shortBagKey));//获取最终缓存中的键
                var bag         = new TestContainerBag1()
                {
                    Key      = shortBagKey,
                    DateTime = SystemTime.Now
                };
                TestContainer1.Update(shortBagKey, bag, TimeSpan.FromHours(1)); //更新到缓存(立即更新)
                sb.AppendFormat("{0}:{1}<br />", "bag.DateTime", bag.DateTime.ToString("o"));

                Thread.Sleep(1);

                bag.DateTime = SystemTime.Now; //进行修改

                //读取队列
                var mq     = new SenparcMessageQueue();
                var mqKey  = SenparcMessageQueue.GenerateKey("ContainerBag", bag.GetType(), bag.Key, "UpdateContainerBag");
                var mqItem = mq.GetItem(mqKey);
                sb.AppendFormat("{0}:{1}<br />", "bag.DateTime", bag.DateTime.ToString("o"));
                sb.AppendFormat("{0}:{1}<br />", "已经加入队列", mqItem != null);
                sb.AppendFormat("{0}:{1}<br />", "当前消息队列数量(未更新缓存)", mq.GetCount());

                if (mq.GetCount() >= 3)
                {
                    //超过3是不正常的,或有其他外部干扰
                    sb.AppendFormat("<br>=====MQ队列({0})start=======<br>", mq.GetCount());
                    foreach (var item in SenparcMessageQueue.MessageQueueDictionary)
                    {
                        sb.AppendFormat("{0}:{1}<br />", item.Key, item.Value.Key);
                    }

                    sb.AppendFormat("=====MQ队列({0})=======<br><br>", mq.GetCount());
                }

                var itemCollection = containerCacheStrategy.GetAll <TestContainerBag1>();

                var existed = itemCollection.ContainsKey(finalBagKey);
                sb.AppendFormat("{0}:{1}<br />", "当前缓存是否存在", existed);
                sb.AppendFormat("{0}:{1}<br />", "插入缓存时间",
                                !existed ? "不存在" : itemCollection[finalBagKey].CacheTime.ToString("o")); //应为0

                var waitSeconds = i;
                sb.AppendFormat("{0}:{1}<br />", "操作", "等待" + waitSeconds + "秒");
                Thread.Sleep(waitSeconds * 1000); //队列线程默认轮询等待时间为1秒,当等待时间超过1秒时,应该都已经处理完毕

                sb.AppendFormat("{0}:{1}<br />", "当前消息队列数量(未更新缓存)", mq.GetCount());

                itemCollection = containerCacheStrategy.GetAll <TestContainerBag1>();
                existed        = itemCollection.ContainsKey(finalBagKey);
                finalExisted   = existed && itemCollection[finalBagKey].CacheTime.Date == SystemTime.Now.Date;
                sb.AppendFormat("{0}:{1}<br />", "当前缓存是否存在", existed);
                sb.AppendFormat("{0}:{1}<br />", "插入缓存时间",
                                !existed ? "不存在" : itemCollection[finalBagKey].CacheTime.ToString("o")); //应为当前加入到缓存的最新时间
            }

            sb.AppendFormat("<br />============<br /><br />");
            sb.AppendFormat("{0}:{1}<br />", "测试结果", !finalExisted ? "失败" : "成功");

            return(Content(sb.ToString()));
            //ViewData["Result"] = sb.ToString();
            //return View();
        }
        public ActionResult RunTest()
        {
            var sb = new StringBuilder();
            //var containerCacheStrategy = CacheStrategyFactory.GetContainerCacheStrategyInstance();
            var containerCacheStrategy = CacheStrategyFactory.GetObjectCacheStrategyInstance().ContainerCacheStrategy;

            sb.AppendFormat("{0}:{1}<br />", "当前缓存策略", containerCacheStrategy.GetType().Name);

            var finalExisted = false;

            for (int i = 0; i < 3; i++)
            {
                sb.AppendFormat("<br />====== {0}:{1} ======<br /><br />", "开始一轮测试", i + 1);
                var shortBagKey = DateTime.Now.Ticks.ToString();
                var finalBagKey = containerCacheStrategy.GetFinalKey(ContainerHelper.GetItemCacheKey(typeof(TestContainerBag1), shortBagKey));//获取最终缓存中的键
                var bag         = new TestContainerBag1()
                {
                    Key      = shortBagKey,
                    DateTime = DateTime.Now
                };
                TestContainer1.Update(shortBagKey, bag); //更新到缓存(队列)
                sb.AppendFormat("{0}:{1}(Ticks:{2})<br />", "bag.DateTime", bag.DateTime.ToString(),
                                bag.DateTime.Ticks);

                Thread.Sleep(1);

                bag.DateTime = DateTime.Now; //进行修改

                //读取队列
                var mq     = new SenparcMessageQueue();
                var mqKey  = SenparcMessageQueue.GenerateKey("ContainerBag", bag.GetType(), bag.Key, "UpdateContainerBag");
                var mqItem = mq.GetItem(mqKey);
                sb.AppendFormat("{0}:{1}(Ticks:{2})<br />", "bag.DateTime", bag.DateTime.ToString(),
                                bag.DateTime.Ticks);
                sb.AppendFormat("{0}:{1}<br />", "已经加入队列", mqItem != null);
                sb.AppendFormat("{0}:{1}<br />", "当前消息队列数量(未更新缓存)", mq.GetCount());

                var itemCollection = containerCacheStrategy.GetAll <TestContainerBag1>();
                var existed        = itemCollection.ContainsKey(finalBagKey);
                sb.AppendFormat("{0}:{1}<br />", "当前缓存是否存在", existed);
                sb.AppendFormat("{0}:{1}<br />", "插入缓存时间",
                                !existed ? "不存在" : itemCollection[finalBagKey].CacheTime.Ticks.ToString()); //应为0

                var waitSeconds = i;
                sb.AppendFormat("{0}:{1}<br />", "操作", "等待" + waitSeconds + "秒");
                Thread.Sleep(waitSeconds * 1000); //线程默认轮询等待时间为2秒
                sb.AppendFormat("{0}:{1}<br />", "当前消息队列数量(未更新缓存)", mq.GetCount());

                itemCollection = containerCacheStrategy.GetAll <TestContainerBag1>();
                existed        = itemCollection.ContainsKey(finalBagKey);
                finalExisted   = existed;
                sb.AppendFormat("{0}:{1}<br />", "当前缓存是否存在", existed);
                sb.AppendFormat("{0}:{1}(Ticks:{2})<br />", "插入缓存时间",
                                !existed ? "不存在" : itemCollection[finalBagKey].CacheTime.ToString(),
                                !existed ? "不存在" : itemCollection[finalBagKey].CacheTime.Ticks.ToString()); //应为当前加入到缓存的最新时间
            }

            sb.AppendFormat("<br />============<br /><br />");
            sb.AppendFormat("{0}:{1}<br />", "测试结果", !finalExisted ? "失败" : "成功");

            return(Content(sb.ToString()));
            //ViewData["Result"] = sb.ToString();
            //return View();
        }