文章

调用特性(一)之回声测试

调用特性(一)之回声测试

本文基于 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 接口,代码如下:

![](/assets/images/learning/dubbo/dubbo-invocation-echo/dabdbde7717298cd4f26e74c2d35e8ff.png)

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 进行授权