实时监控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进行封装,支持分布式消息树,如需转载请自行联系原博主。

目录
相关文章
|
前端开发 JavaScript 数据挖掘
医院LIS管理系统源码,DEV报表、前端js封装、分布式文件存储
云LIS系统还支持质控管理,为实验室提供科学的质量控制机制。用户可以根据需要调整质控参数,并可自动生成质控图表和统计分析报告。提供了数据分析功能,可以通过数据挖掘和分析来发现潜在关联性,为实验室提供更多的参考和决策支持
|
3月前
|
监控 中间件
分布式链路监控系统问题之当某个Segment数据缺失时还原调用树的问题如何解决
分布式链路监控系统问题之当某个Segment数据缺失时还原调用树的问题如何解决
|
5月前
|
运维 监控 Java
SpringBoot-ElasticJob封装快速上手使用(分布式定时器)
SpringBoot-ElasticJob封装快速上手使用(分布式定时器)
|
消息中间件 存储 Docker
.Net Core对于`RabbitMQ`封装分布式事件总线
.Net Core对于`RabbitMQ`封装分布式事件总线
223 1
.Net Core对于`RabbitMQ`封装分布式事件总线
|
存储 缓存 监控
分布式监控CAT服务端的本地部署
CAT(Central Application Tracking),是美团点评基于 Java 开发的一套开源的分布式实时监控系统。美团点评基础架构部希望在基础存储、高性能通信、大规模在线访问、服务治理、实时监控、容器化及集群智能调度等领域提供业界领先的、统一的解决方案,CAT 目前在美团点评的产品定位是应用层的统一监控组件,在中间件(RPC、数据库、缓存、MQ 等)框架中得到广泛应用,为各业务线提供系统的性能指标、健康状况、实时告警等服务。
631 0
分布式监控CAT服务端的本地部署
|
存储 监控 Java
大众点评开源分布式监控平台 CAT 深度剖析
一、CAT介绍 CAT系统原型和理念来源于eBay的CAL的系统,CAT系统第一代设计者吴其敏在eBay工作长达十几年,对CAL系统有深刻的理解。CAT不仅增强了CAL系统核心模型,还添加了更丰富的报表。
3176 0
|
1月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
3月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
107 2
基于Redis的高可用分布式锁——RedLock

热门文章

最新文章