当前位置: 移动技术网 > IT编程>开发语言>Java > 深度解析dubbo过滤器之回声测试

深度解析dubbo过滤器之回声测试

2020年07月31日  | 移动技术网IT编程  | 我要评论

本文基于dubbo v2.6.1

1.什么是回声测试

我这里引用官方的解释:

回声测试用于检测服务是否可用,回声测试按照正常请求流程执行,能够测试整个调用是否通畅,可用于监控。

我们可以看出来这个回声测试其实就是检测服务是否可用的,看看调用是否畅通。

2. 回声测试使用

我这里使用注解的方式使用一下这个回声测试,如果想了解xml配置的方式可以看下官方文档的案例:

2.1 服务提供者编码

我这里有一个服务提供者,然后暴露接口IHelloProviderService,

public interface IHelloProviderService {
    String getName(Integer id);
}

实现类可以随便写写,别忘了加dubbo 的@Service 注解就行

@org.springframework.stereotype.Service
@Service
public class IHelloProviderServiceImpl  implements IHelloProviderService {
    @Override
    public String getName(Integer id) {
        return "test";
    }
}

2.2 服务调用者编码

服务调用者这边使用@Reference注解来生成接口的代理。

@RestController
public class TestController {
    @Reference(check = false,interfaceClass = IHelloProviderService.class)
    private EchoService echoService;
    @RequestMapping("/tests")
    public String test(){
        Object aaa = echoService.$echo("aaa");
        System.out.println(aaa);
        return null;
    }
}

我这里使用的是EchoService类型,然后代理的接口是IHelloProviderService,可以看下这个EchoService,这个接口是dubbo提供的,就一个echoecho方法,然后在生成代理类的时候代理类实现业务接口的同时也会实现这个接口,重写里面echo方法,所有我们在获取这个接口实现类的时候可以在 EchoService类型与你的业务接口类型 间相互转换,这里使用注解的方式可能不好理解,使用xml的方式会好理解些。
关于这个实现原理我们在后面解析的时候会说到。
在这里插入图片描述

2.3 调用测试

使用postman或者浏览器请求一下,然后可以看到打印出来我们请求的参数,这里dubbo就是将你请求参数原封不动返回给你。
在这里插入图片描述

3. 原理解析

3.1 服务调用者端

在服务调用者端,我们在生成某个接口的代理类的时候,dubbo会自动给你的代理类 implements 一个EchoService 接口,然后重写里面的$ehco()方法,多说无益,直接看下dubbo 生成的代理类(这里我们还是将之前讲解Proxy的那张图拿过来)。
在这里插入图片描述
我们可以看到生成的代理类,不光实现类业务接口,也实现了EchoService,所以我们在获取这个代理类的时候转成EchoService类型就可以跟普通方法一样调用了。

3.2 服务提供者端

服务提供者这端是使用的Filter进行拦截的,dubbo在服务提供者端提供了一个EchoFilter来处理回声调用,我们可以看下这个Filter的源码。
在这里插入图片描述
当调用过来的时候,会被EchoFilter拦截到走到invoke方法中,这个invocation里面其实是封装着调用信息,比如说调用方法,参数类型,参数值,一些附带信息等等。
在invoke方法中,首先 判断,如果 调用方法名字是“$echo”,然后参数不是null,只有一个参数,他就认为是个回声测试调用,直接封装Result 将你传过来的参数返回。

本文地址:https://blog.csdn.net/yuanshangshenghuo/article/details/107701885

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网