使用Redis分布式隊列

來源:互聯網
上載者:User

標籤:

1.這是處理異常的類

    public class MyExceptionAttribute:HandleErrorAttribute    {        //public static Queue<Exception> ExceptionQueue = new Queue<Exception>();        //項目中使用下面方式建立redisclient        public static IRedisClientsManager clientManager = new PooledRedisClientManager(new string[] { "127.0.0.1:6379" });        public static IRedisClient redisClient = clientManager.GetClient();        /// <summary>        /// 捕獲異常        /// </summary>        /// <param name="filterContext"></param>        public override void OnException(ExceptionContext filterContext)        {            base.OnException(filterContext);            Exception ex = filterContext.Exception;            //寫到隊列            //ExceptionQueue.Enqueue(ex);            redisClient.EnqueueItemOnList("errorQueue", ex.ToString());            //跳轉到錯誤頁面.            filterContext.HttpContext.Response.Redirect("/Error.html");        }    }

2.Global檔案中配置

public class MvcApplication : SpringMvcApplication //System.Web.HttpApplication    {        protected void Application_Start()        {            log4net.Config.XmlConfigurator.Configure();//讀取了設定檔中關於Log4Net配置資訊.            AreaRegistration.RegisterAllAreas();            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);            RouteConfig.RegisterRoutes(RouteTable.Routes);            //開啟一個線程,掃描異常資訊隊列。            string filePath = Server.MapPath("/Log/");            ThreadPool.QueueUserWorkItem((a) => {                while (true)                {                    //判斷一下隊列中是否有資料                    //if (MyExceptionAttribute.ExceptionQueue.Count() > 0)                    if (MyExceptionAttribute.redisClient.GetListCount("errorQueue") > 0)                    {                        string errorMsg =MyExceptionAttribute.redisClient.DequeueItemFromList("errorQueue");                        {                            //Exception ex = MyExceptionAttribute.ExceptionQueue.Dequeue();                            if (!string.IsNullOrEmpty(errorMsg))                            {                                //將異常資訊寫到記錄檔中。                                //string fileName = DateTime.Now.ToString("yyyy-MM-dd");                                //File.AppendAllText(filePath+fileName+".txt",ex.ToString(),System.Text.Encoding.UTF8);                                ILog logger = LogManager.GetLogger("errorMsg");                                logger.Error(errorMsg);                            }                            else                            {                                //如果隊列中沒有資料,休息                                Thread.Sleep(3000);                            }                        }                    }                    else                    {                        //如果隊列中沒有資料,休息                        Thread.Sleep(3000);                    }                }                                    },filePath);        }    }

3.不要忘記使用Redis需要的3個dll檔案

使用Redis分布式隊列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.