我有一个客户端,该客户端调用一个grpc服务A,该客户端又调用另一个grpc服务B。我想使用ServerInterceptor实现在客户端和服务A的根范围(级别1)下捕获整个调用跟踪作为其子范围(级别2),将服务B作为下一级子范围(级别3),如下所示:
Client Span
|
|__ Server A Span
|
|__ Server B Span
我想为此使用客户端和服务器拦截器,因为我可以跟踪所有方法调用而无需显式检测整个产品代码。因此,在进行每个子调用时,我需要在父上下文中注入span上下文,以便子级的拦截器可以在创建自己的span时提取并将其用作父span。
由于我需要在服务器启动时声明并传递所有拦截器,如图here所示,因此这些拦截器不会相互影响。在这种情况下,如何在每个级别动态注入span上下文?有没有办法在拦截另一个呼叫的同时将ServerInterceptor添加到已启动的服务中?
换句话说,如何跨使用单独的服务器跟踪拦截器跟踪的服务传播跨度上下文?
这是我添加拦截器的方式:
server = ServerBuilder.forPort(port)
.addService(ServerInterceptors.intercept(service, someInterceptor,
someOtherInterceptor, serverTracingInterceptor))
.build()
.start();
我正在尝试创建类似于以下内容的服务器和客户端跟踪拦截器: ServerTracingInterceptor.java, ClientTracingInterceptor.java。
如果这不可能,您能否建议替代方法?
谢谢!
答案 0 :(得分:1)
这绝对是一个错误。请针对opentracing java-grpc提交问题