实时监控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的监控,敬请期待!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:实时监控Cat之旅~对Get和Post进行封装,支持分布式消息树,如需转载请自行联系原博主。

目录
相关文章
|
1月前
|
NoSQL 算法 安全
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
Redlock 算法-主从redis分布式锁主节点宕机锁丢失的问题
152 0
|
1月前
|
NoSQL 关系型数据库 MySQL
分布式锁(redis/mysql)
分布式锁(redis/mysql)
55 1
|
3月前
|
NoSQL Java 测试技术
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
字节二面:Spring Boot Redis 可重入分布式锁实现原理?
158 1
|
3月前
|
存储 缓存 NoSQL
【分布式】Redis与Memcache的对比分析
【1月更文挑战第25天】【分布式】Redis与Memcache的对比分析
|
3月前
|
监控 NoSQL Linux
【分布式】Redis的持久化方案解析
【1月更文挑战第25天】【分布式】Redis的持久化方案解析
|
23天前
|
NoSQL Java Redis
如何通俗易懂的理解Redis分布式锁
在多线程并发的情况下,我们如何保证一个代码块在同一时间只能由一个线程访问呢?
34 2
|
1月前
|
缓存 NoSQL Java
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
57 0
|
1月前
|
人工智能 监控 NoSQL
【万字长文 一文搞定】Redis:从新手村到大师殿堂的奥德赛之旅 9种实现分布式锁的全技术指南
【万字长文 一文搞定】Redis:从新手村到大师殿堂的奥德赛之旅 9种实现分布式锁的全技术指南
80 4

热门文章

最新文章