调用特性(一)之回声测试
调用特性(一)之回声测试
本文基于 Dubbo 2.6.1 版本,望知悉。
1. 概述
本文分享回声测试。我们来看下 《用户指南 —— 回声测试》 的定义:
回声测试用于检测服务是否可用,回声测试按照正常请求流程执行,能够测试整个调用是否通畅,可用于监控。
2. 服务消费者
2.1 EchoService
com.alibaba.dubbo.rpc.service.EchoService ,Echo 服务接口。代码如下:
```plain text plain public interface EchoService { /** * echo test. * * @param message message. * @return message. */ Object $echo(Object message); }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
---
所有服务自动实现 EchoService 接口,只需将任意服务引用强制转型为 EchoService,即可使用。
在 AbstractProxyFactory 中,#getProxy(invoker) 方法,创建服务消费者的 Proxy 对象时,自动实现 EchoService 接口,代码如下:

AbstractProxyFactory
## 2.2 使用示例
旁白君:如下部分,从官方文档,直接复制粘贴的。
Spring 配置:
```plain text
plain <dubbo:reference id="memberService" interface="com.xxx.MemberService" />
代码:
```plain text plain // 远程服务引用 MemberService memberService = ctx.getBean(“memberService”); EchoService echoService = (EchoService) memberService; // 强制转型为EchoService // 回声测试可用性 String status = echoService.$echo(“OK”); assert(status.equals(“OK”));
1
2
3
4
5
6
7
8
9
10
11
12
13
---
# 3. 服务提供者
服务提供者,是**不实现** EchoService 接口,而是通过 EchoFilter 实现。
## 3.1 EchoFilter
[com.alibaba.dubbo.rpc.filter.EchoFilter](https://github.com/YunaiV/dubbo/blob/master/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/filter/EchoFilter.java) ,实现 Filter 接口,回声过滤器。代码如下:
```plain text
plain @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); } }
- 使用 Dubbo SPI Adaptive 机制,自动加载服务提供者 ,仅限 。
- 如果调用方法是回声1 调用时,通过方法名( $echo ) 和方法参数数量为 ,直接返回方法参数。
- 若果调用方法非回声 调用时,调用 Invoker#invoke(invocation) 方法,继续走后面的过滤链。
666. 彩蛋
知识星球
美滋滋。
本文由作者按照 CC BY 4.0 进行授权
