Redis分佈式隊列解決文件併發的問題

1.首先將捕獲的異常寫到Redis的隊列中html

 

 1  public class MyExceptionAttribute : HandleErrorAttribute  2  {  3         public static IRedisClientsManager clientManager = new PooledRedisClientManager(new string[] { "127.0.0.1:6379", "192.168.1.2:6379" });  4         public static IRedisClient redisClent = clientManager.GetClient();  5         public override void OnException(ExceptionContext filterContext)  6  {  7             base.OnException(filterContext);  8             Exception ex = filterContext.Exception;  9             //接下來就是得加入到隊列中進行處理
10             redisClent.EnqueueItemOnList("errorMsg", ex.ToString()); 11             //跳轉到錯誤頁面
12             filterContext.HttpContext.Response.Redirect("/Error.html"); 13  } 14     }

2.而後單獨開啓一個線程對捕獲的數據寫到文件中去redis

  public void StartDealLog() { string filePath = Server.MapPath("/Log/"); ThreadPool.QueueUserWorkItem((a) => { while (true) { if (MyExceptionAttribute.redisClent.GetListCount("errorMsg")>0) { // Exception ex = MyExceptionAttribute.MyExceptionQueue.Dequeue();
                        string ex=MyExceptionAttribute .redisClent.DequeueItemFromList("errorMsg"); if (ex != null) { //將錯誤寫到日誌中取
                            ILog logger = LogManager.GetLogger("errorMsg"); logger.Error(ex); } else { Thread.Sleep(3000); } } else {//將當前線程掛起(就近)
                        Thread.Sleep(3000); } } },filePath); }

3.關於上面的代碼的思考服務器

對於每個錯誤,IIS所在的服務器都會啓動一個線程,這對程序服務器壓力仍是很大的,因此能夠考慮使用Redis的分佈式,將上面的處理代碼單獨放到一臺異常處理服務器上,能夠是一個控制檯程序或者網站程序,只要把上面的代碼複製過去就能夠了分佈式

相關文章
相關標籤/搜索