正版包邮通用源码阅读指导书软件
68.7元
包邮
(需用券)
去购买 >
转自:https://blog.csdn.net/appearb...
目录
https://segmentfault.com/a/11900000382304751.需求
https://segmentfault.com/a/11900000382304752.设计思路
https://segmentfault.com/a/11900000382304753.架构图
https://segmentfault.com/a/11900000382304754.具体实现
https://segmentfault.com/a/11900000382304751.定义拦截器
https://segmentfault.com/a/11900000382304752.获取接口参数服务
https://segmentfault.com/a/11900000382304753.对外需要导入的注解
https://segmentfault.com/a/11900000382304755.同步到ClickHouse
https://segmentfault.com/a/11900000382304756.外部系统使用
https://segmentfault.com/a/11900000382304757.结束
1.需求
记录服务接口调用情况,包括通用字段:域名、IP、接口路径、查询参数、是否成功、请求时间、耗时、错误信息、接口名;以及业务自定义字段
做成通用组件的形式,最小化的侵入业务系统
2.设计思路
自定义Spring拦截器,获取通用字段,以及业务自定义字段放到ThreadLocal,接口调用完成后异步发送到Kafka,然后消费到ClickHouse进行统计
需要统计的服务只需要依赖本组件,加一个注解,并配置指定的kafka地址即可
3.架构图
4.具体实现
1.定义拦截器
在接口调用前初始化并从request里获取ip、域名、请求时间、请求参数等
接口调用后设置接口耗时、错误信息等;需要删除该线程的ThreadLocal对象,因为spring的请求线程会在线程池里复用,如果不删掉,后续请求会用到该线程的ThreadLocal数据package cn.xianbin.apistat.interceptor;
import cn.xianbin.apistat.service.ApiStatService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.