Cat(4):API介绍—Transaction

news2024/9/24 21:19:44

1 基本用法

Transaction 适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数。

现在我们的框架还没有与dubbo、mybatis做集成,所以我们通过手动编写一个本地方法,来测试Transaction的用法,创建TransactionController用于测试。

package com.example.demo.controller;

import com.dianping.cat.Cat;
import com.dianping.cat.message.Transaction;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/transaction")
public class TransactionController {
    @RequestMapping("/test")
    public String test(){
        //开启第一个Transaction,类别为URL,名称为test
        Transaction t = Cat.newTransaction("URL", "test");
        try {
            dubbo();
            t.setStatus(Transaction.SUCCESS);
        } catch (Exception e) {
            t.setStatus(e);
            Cat.logError(e);
        } finally {
            t.complete();
        }
        return "test";
    }

    private String dubbo(){
        //开启第二个Transaction,类别为DUBBO,名称为dubbo
        Transaction t = Cat.newTransaction("DUBBO", "dubbo");
        try {
            t.setStatus(Transaction.SUCCESS);
        } catch (Exception e) {
            t.setStatus(e);
            Cat.logError(e);
        } finally {
            t.complete();
        }
        return "test";
    }
}

上面的代码中,开启了两个Transaction,其中第一个Transaction为Controller接收到的接口调用,第二个位我们编写的本地方法dubbo用来模拟远程调用。在方法内部,开启第二个Transaction。

启动项目,访问接口http://localhost:8085/transaction/test。

 

点击左侧菜单Transaction报表,选中URL类型对应的Log View查看调用链关系。

 

如图所示调用链已经形成,可以看到类型为URL的test调用了类型为DUBBO的dubbo方法,分别耗时0.02ms和0.01ms。

2 扩展API

CAT提供了一系列 API 来对 Transaction 进行修改。

  • addData 添加额外的数据显示
  • setStatus 设置状态,成功可以设置SUCCESS,失败可以设置异常
  • setDurationInMillis 设置执行耗时(毫秒)
  • setTimestamp 设置执行时间
  • complete 结束Transaction

    @RequestMapping("/api")
    public String api(){
        Transaction t = Cat.newTransaction("URL", "pageName");
        try {
            //设置执行时间1秒
            t.setDurationInMillis(1000);
            t.setTimestamp(System.currentTimeMillis());
            //添加额外数据
            t.addData("content");
            t.setStatus(Transaction.SUCCESS);
        } catch (Exception e) {
            t.setStatus(e);
            Cat.logError(e);
        } finally {
            t.complete();
        }
        return "api";
    }

启动项目,访问接口http://localhost:8085/transaction/api。

点击左侧菜单Transaction报表,选中URL类型对应的Log View查看调用链关系。

 

 

如图所示,调用耗时已经被手动修改成了1000ms,并且添加了额外的信息content。

在使用 Transaction API 时,你可能需要注意以下几点:

  1. 你可以调用 addData 多次,添加的数据会被 & 连接起来。
  2. 不要忘记完成 transaction!否则你会得到一个毁坏的消息树以及内存泄漏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/890294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络协议的定义、组成和重要性?

什么是网络协议? 网络协议是在计算机网络中,用于规定通信实体之间进行数据传输和通信的规则集合。网络协议涵盖了各种通信细节,包括数据包格式、错误处理、数据传输速率等,是用于分组交换数据网络的一种协议,其任务仅…

Linux:shell脚本:基础使用(4)《正则表达式-grep工具》

正则表达式定义: 使用单个字符串来描述,匹配一系列符合某个句法规则的字符串 正则表达式的组成: 普通字符串: 大小写字母,数字,标点符号及一些其他符号 元字符:在正则表达式中具有特殊意义的专用字符 正则表…

发掘Win10神奇工具:计划任务程序的自动化魔力

在Windows 10系统中,隐藏着许多不为人知的神奇工具,您了解多少呢?想象一下,如果有一种工具,能够像机器人一样在您设定的时间自动执行各种任务,您会不会觉得它是一件非常实用的利器?今天&#xf…

算法通关村第4关【黄金】| 表达式问题

1. 计算器问题 思路:此题不考虑括号和负数情况,单纯使用栈即可解决。注意的是数字可能是多位数需要保留完整的num, 保留数字的前缀符号,当碰到加号,存进去;当碰到减号,存相反数进去;…

【算法系列篇】双指针

文章目录 前言什么是双指针算法1.移动零1.1 题目要求1.2 做题思路1.3 Java代码实现 2.复写零2.1 题目要求2.2 做题思路2.3 Java代码实现 3.快乐数3.1 题目要求3.2 做题思路3.3 Java代码实现 4.盛最多水的容器4.1 题目要求4.2 做题思路4.3 Java代码实现 5.有效三角形的个数5.1 题…

Windows 10 20H2升级至Windows 11

关于Windows 10 20H2和21H1版本结束支持 在Windows 10中,20H2版本是Windows 10的第十个主要更新。此次升级于2020年10月20日上线。 2020年10月更新中的显著变化包括开始菜单、Microsoft Edge的改进、新的可自定义体验、通知体验的增强等。 然而&#…

Windows防火墙屏蔽恶意TCP连接

关闭所有软件(except 安全),wireshark抓包 set filtertcp,抓取所有tcp包, 抓包文件导出为tcp.txt 过滤出ip address 去掉文件头尾,执行以下程序获得ip address #cut_file.py def copy_first_10_chars(input_file, output_fil…

展会预告 | 图扑与您相约用友 2023 全球商业创新大会

为汇聚商业智慧,释放企业潜能,深入推动企业数智化转型升级,创新客户价值,让数智化在更多的企业成功,由用友主办的“2023 全球商业创新大会”,将于本月 8 月 18 日至 20 日,在上海市“国家会展中…

IT运维:使用数据分析平台监控深信服防火墙(进阶)

概述 本文主要在原文档基础上,进行了字段抽取规则、图表的优化。 字段抽取:原文档使用正则的方式,创建了多个视图,本文将改为正则键值的抽取方式,并介绍键值抽取的适用场景 图表的优化:原文使用多为简单的…

56.linux 进程管理命令和用户管理命令

目录 一、进程管理命令 1.ps 2.pstree 3.kill 4.pkill 5.&后台运行程序 6.jobs 7.fg bg 8.top 二、用户管理命令 1.系统存储用户信息的文件 2.添加新用户 3.修改用户密码 4.删除用户 一、进程管理命令 1.ps 用于查看当前系统中运行的进程信息。它可以…

thinkphp开发的在线学习培训考试模拟考试做题练习系统带商城功能证书管理课程系统

thinkphp开发的在线学习培训考试模拟考试做题练习系统带商城功能证书管理课程系统 1、做题界面 2、前端UI的展示 3、带商城购物功能

springboot 通过博途获取plc点位的数据

springboot 通过博途获取plc点位的数据 maven依赖<dependency><groupId>com.github.dathlin</groupId><artifactId>HslCommunication</artifactId><version>3.6.0</version> </dependency>这个版本尽量是新版本&#xff0c;不…

微服务-GateWay(网关)

所谓网关是什么意思&#xff1f; 相当于就是你们小区家的保安&#xff0c;进出小区都得获得保安的同意&#xff0c;守护你们小区的生命财产健康&#xff0c;网关也是如此&#xff0c;对每个请求都严格把关&#xff0c;将合法的或者是获得权限的请求进入服务器 网关的功能&…

【CTF-web】bugku-成绩查询(sql注入)

题目链接&#xff1a;https://ctf.bugku.com/challenges/detail/id/84.html 判断注入点 查看网页源码可知输入数据通过POST发送到index.php并显示出查询结果&#xff0c;可能需要sql注入。 如上图所示&#xff0c;当id为1时返回名字为“龙龙龙”的成绩单。 再测试&#xff0c…

创建第一个任务源码解析

经过上面的操作以后我们就可以启动第一个任务了&#xff0c;函数 prvStartFirstTask()用于启动第一 个任务&#xff0c;这是一个汇编函数&#xff0c;函数源码如下&#xff1a; __asm void prvStartFirstTask( void ) { PRESERVE8 ldr r0, 0xE000ED08 ;R00XE000ED08 (1) ldr r…

Go语言GIN框架安装与入门

Go语言GIN框架安装与入门 文章目录 Go语言GIN框架安装与入门1. 创建配置环境2. 配置环境3. 下载最新版本Gin4. 编写第一个接口5. 静态页面和资源文件加载6. 各种传参方式6.1 URL传参6.2 路由形式传参6.3 前端给后端传递JSON格式6.4 表单形式传参 7. 路由和路由组8. 项目代码mai…

KBEngine增加ThinkingData打点

Windows下的安装ThinkingData 首先根据他的文档&#xff0c;安装sdk和Logbus&#xff0c;他的原理是sdk写入到log文件&#xff0c;然后通过Logbus2来传送到TD&#xff08;ThinkingData&#xff09;服务器。 通过pip获取 Python SDK pip install ThinkingDataSdk pip install…

力扣75——多维动态规划

总结leetcode75中的多维动态规划算法题解题思路。 上一篇&#xff1a;力扣75——一维动态规划 力扣75——多维动态规划 1 不同路径2 最长公共子序列3 买卖股票的最佳时机含手续费4 编辑距离1 - 4 解题总结 1 不同路径 题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角…

史上最全!80个数字化工厂常见术语合集,看完秒懂~

这几天&#xff0c;有几个朋友私信我&#xff0c;问了我不少问题&#xff0c;其中有一个让我讲一讲“数字化工厂”方面的知识&#xff0c;了解我的人想必都清楚&#xff0c;我这个人一般都是有求必应的。 所以今天来聊一聊“数字化工厂”的常见术语&#xff0c;帮助大家快速搞…

【Linux】模拟实现linux的shell

#include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <sys/wait.h> #include <sys/types.h> #define NUM 1024 #define SIZE 32 #define SEP " " int main() {//保存输入后的字符串char …