public void TestAll() { var mq = new SenparcMessageQueue(); var count = mq.GetCount(); var key = DateTime.Now.Ticks.ToString(); //Test Add() var item = mq.Add(key, () => Console.WriteLine("测试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()); }
/// <summary> /// 操作列队 /// </summary> private void OperateQueue() { var mq = new SenparcMessageQueue(); var key = mq.GetCurrentKey(); //获取最新的Key while (!string.IsNullOrEmpty(key)) { var mqItem = mq.GetItem(key); //获取任务项 mqItem.Action(); //执行 mq.Remove(key); //清除 key = mq.GetCurrentKey(); //获取最新的Key } }
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(); }
public void Run() { do { var mq = new SenparcMessageQueue(); var key = mq.GetCurrentKey();//获取最新的Key while (!string.IsNullOrEmpty(key)) { var mqItem = mq.GetItem(key); //获取任务项 mqItem.Action(); //执行 mq.Remove(key); //清除 key = mq.GetCurrentKey(); //获取最新的Key } Thread.Sleep(_sleepMilliSeconds); } while (true); }
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()); }
public void RunTest() { //默认情况下ThreadUtility应该已经将SenparcMessageQueueThreadUtility加入列队 //下面对Container进行测试 var c1 = TestContainer1.GetCollectionList(); var key = DateTime.Now.Ticks.ToString(); var bag = new TestContainerBag1() { Key = key, DateTime = DateTime.Now }; TestContainer1.Update(key, bag); bag.DateTime = DateTime.MinValue;//进行修改 //读取列队 var mq = new SenparcMessageQueue(); var mqKey = SenparcMessageQueue.GenerateKey("A", typeof(TestContainerBag1), bag.Key, "B"); var mqItem = mq.GetItem(mqKey); Assert.IsNotNull(mqItem); }
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(); }