本章节的示例代码位于:https://github.com/gogf/gf/tree/master/example/trace/grpc_with_db
目录结构
Protocol
这里使用到了第三方的 开源项目,用于注入自定义的Golang struct
标签。这里不详细介绍,感兴趣的小伙伴可以自行了解。未来Katyusha
微服务框架的官网文档也会做对这块详细介绍,包括GRPC
工程目录、开发规范、开发工具、拦截器、注册发现、负载均衡等设计话题。
GRPC Server
服务端代码简要说明:
1、首先,客户端也是需要通过jaeger.Init
方法初始化Jaeger
。
2、可以看到,业务逻辑和之前HTTP示例项目完全一致,只是接入层修改为了GRPC协议。
3、我们仍然通过缓存适配器的方式注入Redis缓存:
5、这里也是通过Cache
方法启用ORM
的缓存特性,之前已经做过介绍,这里不再赘述。
GRPC Client
客户端代码简要说明:
1、首先,客户端也是需要通过jaeger.Init
方法初始化Jaeger
。
效果查看
启动服务端:
启动客户端:
这里客户端的执行最后报了一个错误,那是我们故意为之,目的是演示GRPC
报错时的链路信息展示。我们打开jaeger
查看一下链路跟踪信息:
可以看到本次请求涉及到两个服务:tracing-grpc-client
和tracing-grpc-server
,即客户端和服务端。整个请求链路涉及到17
个span
,客户端5
个span
,服务端12
个span
,并且产生了个错误。我们点击查看详情:
我们点击查看一下最后接口调用错误的span
情况:
查看Process
中的Log
信息可以看到,是由于传递的参数为-1
,不满足校验规则,因此在数据校验的时候报错返回了。
由于orm
、redis
、logging
组件在之前的章节中已经介绍过链路信息,因此我们这里主要介绍GRPC Client&Server
的链路信息。
Event/Log | 说明 |
---|---|
grpc.metadata.outgoing | GRPC 客户端请求提交的Metadata 信息,可能会比较大。 |
grpc.request.baggage | GRPC 客户端请求提交的Baggage 信息,用于服务间链路信息传递。 |
grpc.request.message |
|
grpc.response.message | GRPC 客户端请求接收返回的的Message 信息,可能会比较大。仅对Unary 请求类型有效。 |
GRPC Server
GRPC Server
端的Attributes
含义同GRPC Client
,在同一请求中,打印的数据基本一致。
GRPC Server
端的Events
与GRPC Client
不同的是,在同一请求中,服务端接收到的metadata
为,其他同GRPC Client
。