精尽 Dubbo 源码分析 —— 调用特性(一)之回声测试

本文详细介绍了Dubbo的回声测试功能,用于检查服务的可用性。通过分析服务消费者如何利用EchoService接口进行测试,以及服务提供者如何借助EchoFilter实现回声响应,揭示了调用流程的畅通性。
摘要由CSDN通过智能技术生成

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);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值