uniquetruth / remote-debug-agent

a useful java agent for integration testing
Apache License 2.0
71 stars 25 forks source link

添加dubbo调用链的支持 #14

Closed uniquetruth closed 1 year ago

uniquetruth commented 2 years ago

我增加了一个分支,dubbo_invoke_chain,里面添加了dubbo框架下RPC调用的调用链传递支持。单元测试中使用了一个非常简单的网络架构测试通过了(junit案例作为客户端,直连调用服务端的dubbo接口),但尚需要在真实、复杂的环境下测试。

dubbo的调用链传递说明 与HttpServlet类似,客户端发起调用时如果工作线程已与某个身份标识绑定,则使用org.apache.dubbo.rpc.RpcInvocation.setAttachment函数将身份标识写入请求,服务端则优先使用getAttachment方法提取身份标识。
agent的启动参数中增加了参数 dubboLocalIP=true或false ,默认为false。如果设置为true,则客户端发起调用时,如果工作线程未与任何身份标识绑定,则使用org.apache.dubbo.remoting.Endpoint.getLocalAddress().getAddress().getHostAddress()的值做为身份标识,传入setAttachment的参数中。

uniquetruth commented 2 years ago

效果示例

场景:用户操作的浏览器所在电脑为A,浏览器将请求发送到后端服务器B,B在处理过程中通过dubbo接口调用服务器C。
正常情况下,B会提取请求中A的ip与自己的线程绑定,构造调用C的dubbo请求时,会将A的ip写入请求,C也会优先使用该ip去绑定自己的线程。此结果与dubboLocalIP的配置无关。
如果因某种原因,B没有用A的ip绑定自己的线程,则调用C时才会检查dubboLocalIP的配置,若配置为true,B会将使用上述getLocalAddress方法得到的地址写入请求,C也会拿到该值与自己的线程绑定。若配置为false(或未配置),则B不会做任何特殊的动作,C则依靠自己的dubbo框架通信类Channel的getRemoteAddress方法取值,并绑定线程。

uniquetruth commented 1 year ago

v0.0.8 release已实现