Open Maary opened 5 years ago
我在demo中实现opentracing的时候,不同于grpc方式,可以通过context创建子span,在motan-go中,无法传递context到服务端,对整条链路的追踪,似乎只能在一端完成,有没有办法建立整条链路的追踪信息。
motan使用反射机制执行server端的service,由于golang没有类似java的threadlocal的隐式传递机制,在server端的业务逻辑中无法直接获取到rpc的context。 后续我们考虑通过服务契约自动生成golang service时在方法参数中显示增加context来提供类似机制,不过需要等多语言服务描述功能完成后(https://github.com/weibreeze 目前还在开发调试阶段),才能进行。
也可以考虑在service方法签名中显示增加rpc的context,然后在实现provider接口扩展,在反射调用时增加context参数临时解决这个问题。默认server端的provider是DefaultProvider,扩展方式可以参考provider包下的其他provider扩展类。
谢谢你的建议? 我现在遇到了一个问题,在业务代码中部分server端是java实现,部分client端是golang实现,然后通过motan提供的rpc服务调用方式,进行通讯,现在考虑到的一个问题是通过provider扩展golnag这边的服务通讯方式,同样java端也需要实现这个扩展,因为对motan-go的源码和java(motan)的实现方式不是很了解,所以想咨询一下这种解决办法的可行性。表示再次感谢。
java端可以直接在业务代码中通过RpcContext.getContext()
获取请求上下文,所以不需要额外处理。
所以只需要在golang的业务端处理一下,能获取到请求相关信息就可以了。
是支持的,这是当时的pull request,里面有使用示例:https://github.com/weibocom/motan-go/pull/55