1.概述
回声测试用于检测服务是否可用,回声测试按照正常请求流程执行,能够测试整个调用是否通畅,可用于监控。
2. 服务消费者
com.alibaba.dubbo.rpc.service.EchoService ,Echo 服务接口。代码如下:
/**
* Echo service.
*
* 回音服务,用于监控。
*
* @export
*/
public interface EchoService {
/**
* echo test.
*/
Object $echo(Object message);
}
所有服务自动实现 EchoService 接口,只需将任意服务引用强制转型为 EchoService,即可使用。
// 增加 EchoService 接口,用于回生测试。参见文档《回声测试》https://dubbo.gitbooks.io/dubbo-user-book/demos/echo-service.html
if (interfaces == null) {
interfaces = new Class<?>[]{invoker.getInterface(), EchoService.class};
}
2.1 使用示例
// 远程服务引用
MemberService memberService = ctx.getBean("memberService");
EchoService echoService = (EchoService) memberService; // 强制转型为EchoService
// 回声测试可用性
String status = echoService.$echo("OK");
assert(status.equals("OK"));
3. 服务提供者
服务提供者,是不实现 EchoService 接口,而是通过 EchoFilter 实现。
3.1 EchoFilter
com.alibaba.dubbo.rpc.filter.EchoFilter ,实现 Filter 接口,回声过滤器。代码如下:
@Activate(group = Constants.PROVIDER, order = -110000)
public class EchoFilter implements Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {
// 方法名为 `$echo` ,参数只有一个
if (inv.getMethodName().equals(Constants.$ECHO) && inv.getArguments() != null && inv.getArguments().length == 1) {
return new RpcResult(inv.getArguments()[0]);
}
return invoker.invoke(inv);
}
}