1、编写javaagent用于对dubbo invoke方案做切面处理
public class Agent {
private static final Logger logger = LogManager.getLogger(Agent.class);
public static void premain(String arguments, Instrumentation instrumentation) {
// 匹配被拦截方法
agentBuilder.type(named("com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker"))
.transform(
new AgentBuilder.Transformer() {
@Override
public DynamicType.Builder<?> transform(DynamicType.Builder<?> builder, TypeDescription type, ClassLoader classLoader, JavaModule module) {
return builder.method(named("invoke")).intercept(
MethodDelegation.withDefaultConfiguration().to(
new CommonInterceptor(classLoader, "com.example.dubbomock.agent.DubboInvokeInterceptor")));
}
}
).installOn(instrumentation);
//注解方式l配置依赖的dubbo interface方式拦截
agentBuilder.type(named("com.alibaba.dubbo.config.ReferenceConfig"))
.transform(
//拦截器没有call 其他类加载器加载的类,无需做classloader转换
new AgentBuilder.Transformer() {
@Override
public DynamicType.Builder<?> transform(DynamicType.Builder<?> builder, TypeDescription type, ClassLoader classLoader, JavaModule module) {
return builder.method(named("createProxy")).intercept(
MethodDelegation.to(DubboStartInterceptor.class));
}
}
).installOn(instrumentation);
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。