Dorado是美團點評的一個RPC框架,可以在github上看到其源碼。然後看到其中的鏈路追蹤模塊,在這記錄下。
如下圖1,這個模塊裏面只有一個類,這個類繼承了AbstractInvokeTrace,在框架裏面爲了擴展性,所以幾乎都會使用抽象,這裏也是,這個類在core模塊裏面。圖1中在resources下加入這個類下實現文件,這是JDK的SPI。
圖1
如下圖2所示,trace模塊在dorado-core模塊,而InvokeTrace是最抽象的基類,AbstractInvokeTrace是抽象類,實現公共的實現
圖2
如下所示,定義了一些基礎的方法,實現則由子抽象類和子實現類來實現,所以最重要的實現放在AbstractInvokeTrace和CatInvokeTrace中。
List-1
@SPI
public interface InvokeTrace {
String getName();
void init(String appkey);
void clientSend(TraceParam traceParam, RpcInvocation invocation);
void clientRecv(TraceParam traceParam, RpcInvocation invocation);
void serverRecv(TraceParam traceParam, RpcInvocation invocation);
void serverSend(TraceParam traceParam, RpcInvocation invocation);
}
List-1中有註解@SPI是因爲這個接口的實現類,如果需要使用,都必須使用JDK的SPI的方式來。
很多和PingCAT的調用都是在CatInvokeTrace中實現,而AbstractInvokeTrace則是較爲抽象,並沒有涉及PingCAT的代碼。