2022 年 5 月

Golang基于泛型实现的简单依赖注入(DI)

代码

前言 众所周知,在SpringBoot中 @Autowire 依赖注入是极其方便的。 在Golang中,也可以利用 reflect 反射实现简单的依赖注入。但在泛型出现之前,这样的依赖注入在IDE提示上不够优雅,如果实例和interface的类型不对应,需要在运行时才会报错。(可以参考我之前的文章《[Golang实现简单的IoC][1]》) Golang 1.18 终于推出泛型后,我们以利用泛型的…

Spring Boot 对接 Jaeger 时利用Filter修改 Span 的 OperationName

代码

Spring Boot 接入Jager后,访问接口时,默认显示对应控制器的方法名。如下图: 控制器方法名经常会重名,也不利于我们利用URL查询接口。在这种情况下,我们可以利用Opentracing提供的方法获取到当前Span,并修改OperationName。 1、新建一个Filter用于修改OperationName 通过 GlobalTracer 获取到当前 Span ,并写入 HttpSer…

Spring Boot 利用Filter将请求数据、响应数据写入日志

代码

SpringBoot中Servlet提供的Filter与Gin的Middleware洋葱模型是很相似的,本质上可以认为是责任链设计模式。通过Filter,我们可以获取到请求对象 ServletRequest 、响应对象 ServletResponse 。 利用Filter的特性,我们可以实现一个Filter,获取Request和Response,并整合写入到日志中去。 本文基于 Spring Bo…

Spring Boot 2.x 整合Jaeger实现分布式跟踪(链路、日志、性能监测)

代码

Zipkin是最早流行起来的主流分布式跟踪平台,起源于Google Dapper并由Twitter进一步开发。而后Uber用Golang实现了Jaeger。Jaeger除了兼容Zipkin原有的大部分功能以外,还提供了更为丰富的功能。对比来说,两者都是比较成熟稳定的分布式跟踪解决方案。 考虑Jaeger更好的性能、更轻量的资源占用,所以决定在项目中使用Jaeger。 Spring Cloud 的S…