对基于请求的分布式消息树的分析在MVC时有过滤器System.Web.Mvc.ActionFilterAttribute,它可以对action执行的整个过程进行拦截,执行前与执行后我们可以注入自己的代码,这是我们实现对请求做监控的前提,对于一个请求来说,如果它是从Get或者Pos ...
对基于请求的分布式消息树的分析
在MVC时有过滤器System.Web.Mvc.ActionFilterAttribute,它可以对action执行的整个过程进行拦截,执行前与执行后我们可以注入自己的代码,这是我们实现对请求做监控的前提,对于一个请求来说,如果它是从Get或者Post过来的,我们会在发起端将初始catContext进行链条式的传递,从第一个节点开始生成并传递,最后到尾结节,开始执行cat,生成新的context,将新的context回写到响应头,由上一个节点拿到这个响应头,开始写自己的cat,这个过程最后执行到第一个节点,整个过程结束!
对消息树流程的设计
代码的实现
下面开始设计咱们的Filter**,用来生成catContext,并将处理后的context写响应头中
/// <summary> /// Cat**,主要拦截Http请求 /// </summary> public class CatFilter : System.Web.Mvc.ActionFilterAttribute { /// <summary> /// 请求来到时 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); } /// <summary> /// 请求结束时 /// 调用次序:A->B->C->c->b->a,从c开始执行,把context结果在响应头里依据向回传 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext) { var context = PureCat.CatClient.GetCatContextFromServer(); if (context != null) { context = PureCat.CatClient.DoTransaction("youDomain", filterContext.HttpContext.Request.Url.AbsoluteUri, () => { PureCat.CatClient.LogRemoteCallServer(context); PureCat.CatClient.LogEvent(filterContext.HttpContext.Request.Url.AbsoluteUri, "Action Finish..."); if (filterContext.Exception != null) { PureCat.CatClient.LogError(filterContext.Exception); } }); #region 响应头写数据 if (filterContext.HttpContext.Response.Headers.GetValues("catContext") != null && filterContext.HttpContext.Response.Headers.GetValues("catContext").Length > 0) { filterContext.HttpContext.Response.Headers.Remove("catContext"); } filterContext.HttpContext.Response.Headers.Add("catContext", Lind.DDD.Utils.SerializeMemoryHelper.SerializeToJson(context)); #endregion } base.OnActionExecuted(filterContext); } }
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:实时监控Cat之旅~对请求是否正常结束做监控(分布式的消息树)
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。