04、API介绍Transaction

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!否则你会得到一个毁坏的消息树以及内存泄漏!

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: