[QUESTION] JsonRPC + Zipkin 无法追踪到请求微服务后的链路
tiancheng-66 opened this issue · comments
Before you submit an issue, please be sure to search through existing issues as well as search through the documentation
- [] I've searched all existing issues
- [] I've read all relevant documentation I could find
Describe your question
调用链路为 consumer -> provider1 -> provider2
三个服务均按照官网文档配置了Middleware 和 Aspect
你在provider2拿不到tracerid?RpcAspect是有tracerid组装逻辑的。
- 确认provider2能否拿到tracerid
- 确认provider2的trace上报配置是否正常
- 确认provider的Aspect是否配置了正确的Aspect,默认有一些,但是我看了一下默认是没有JSONAspect的。
1.我不知道该如何查看provider2的tracerid 目前我拿到tracerid的方法是通过consumer的middleware(Hyperf\Tracer\Middleware\TraceMiddleware)
2.我因为拿不到provider1和provider2的tracerid所以只能在zipkin中通过serviceName来查询 但是没有数据。因为我consumer是从controller中调用的jsonrpc去请求provider1 所以有请求provider1的记录
3.我确认正确配置了aspect (consumer和provider我都有做这个配置)
config/autoload/aspects.php:
return [
RpcAspect::class,
\Hyperf\Tracer\Aspect\JsonRpcAspect::class,
Hyperf\Tracer\Aspect\CoroutineAspect::class,
];
- 你从provider2中的TracerMiddleware打印traceid,与其他几个provider核对一下看看是否一致。
- 你在provider、provider1中使用什么方式调用其他服务的,
刚刚翻了一下源码,似乎hyperf的jsonrpc并没有实现对traceid的组装。
这一步可能需要你自己完成,包括上报等。
- 你从provider2中的TracerMiddleware打印traceid,与其他几个provider核对一下看看是否一致。
- 你在provider、provider1中使用什么方式调用其他服务的,
刚刚翻了一下源码,似乎hyperf的jsonrpc并没有实现对traceid的组装。
这一步可能需要你自己完成,包括上报等。
1.我测试了一下 通过JsonPrc请求 provider1 和 provider2 都没有走TracerMiddleware,如果走JsonRpc进来的数据应该是不会走到中间件的
2.我的调用方法是:
consumer 调用 provider1 的 order 方法 去拿到订单信息
之后在provider1 的 order方法中 调用 provider2 的pay方法 拿到支付链接 返回给 consumer,目前走到这个order方法之后 zipkin也不会上报链路信息
TraceMiddleware是基于HTTP的中间件,你JSONRPC拿不到是正常的。建议自己通过重新封装JsonRpcTransportor,对send加上一层封装层传递meta信息,然后在consumer这边接收数据时候进行反解meta与trace上报。
TraceMiddleware是基于HTTP的中间件,你JSONRPC拿不到是正常的。建议自己通过重新封装JsonRpcTransportor,对send加上一层封装层传递meta信息,然后在consumer这边接收数据时候进行反解meta与trace上报。
好的 谢谢!