实时监控Cat之旅~对Get和Post进行封装,支持分布式消息树
对第三方接口的调用我们需要对GET和POST进行监控,看一些请求的执行是否成功,如A调用B,B调用C,C调用D,这一连串的东西需要我们使用cat进行记录,进行记录之后,我们可以很容易的发现请求响应的时间及是否出错,下面是我对这两种请求的封装。
/// <summary> /// cat中使用的HttpClient /// </summary> public class CatHttpClient { /// <summary> /// 返回当前Cat上下文 /// </summary> /// <returns></returns> static CatContext GetCurrentContext(string message) { string currentUrl = System.Web.HttpContext.Current.Request.Url.AbsoluteUri; var context = PureCat.CatClient.GetCatContextFromServer(); if (context == null) { context = PureCat.CatClient.DoTransaction("xuexiba", currentUrl, () => { PureCat.CatClient.LogEvent("xuexiba", message, "0", currentUrl); }); } else { context = PureCat.CatClient.DoTransaction("xuexiba", currentUrl, () => { PureCat.CatClient.LogRemoteCallServer(context); PureCat.CatClient.LogEvent("xuexiba", message, "0", currentUrl); }); } return context; } /// <summary> /// Post数据 /// </summary> /// <param name="requestUri"></param> /// <param name="content"></param> /// <returns></returns> public static HttpResponseMessage Post(string requestUri, HttpContent content) { var handler = new HttpClientHandler() { }; using (var http = new HttpClient(handler)) { PureCat.CatClient.SetCatContextToServer(http, GetCurrentContext("Post Request Sent...")); var response = http.PostAsync(requestUri, content).Result; return response; } } /// <summary> /// Get数据 /// </summary> /// <param name="requestUri"></param> /// <returns></returns> public static HttpResponseMessage Get(string requestUri) { var handler = new HttpClientHandler() { }; using (var http = new HttpClient(handler)) { PureCat.CatClient.SetCatContextToServer(http, GetCurrentContext("Get Request Sent..."));//设置接口api的头,发送 var response = http.GetAsync(requestUri).Result; return response; } } }
在程序中使用非常方便,如下代码,一看便知
[AllowAnonymous] public void Step1() { Lind.DDD.CatClientPur.CatHttpClient.Get("Http://localhost:4829/AdminCommon/Step2"); } [AllowAnonymous] public void Step2() { Lind.DDD.CatClientPur.CatHttpClient.Get("Http://localhost:4829/AdminCommon/Step3"); } [AllowAnonymous] public void Step3() { Lind.DDD.CatClientPur.CatHttpClient.Get("Http://localhost:4829/AdminCommon/Step4"); } [AllowAnonymous] public void Step4() { Lind.DDD.CatClientPur.CatHttpClient.Get("Http://localhost:4829/AdminCommon/Error"); }
而它产生的消息树也是我们希望看到的,即从step1到step4的记录,如图
下一讲我们将读一下,如何对一个请求从开始到结束进行cat的监控,敬请期待!
分类:
其它 / 系统架构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2015-03-24 不说技术~关于创业一点想法
2012-03-24 从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~一 DBContext的构造方法,方法的重载
2012-03-24 从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~目录