详解-手写RPC框架(8)-服务重试与服务MOCK

引言

在构建分布式系统中,远程过程调用(RPC)框架是至关重要的组件之一。然而,由于网络不稳定性、服务器故障或其他异常情况,RPC调用可能会失败。为了提高系统的稳定性和可靠性,在RPC框架中实施服务重试和模拟测试是关键策略。

服务重试的意义

当服务连接不上时,可以尝试设置多次重新连接,连接不同的URL,直到重连机会用完或者连接通过。

public class ProxyFactory {
    public static <T>T getProxy(Class interfaceClass){
					
					......
					
                //服务调用,设初始result=null
                String result = null;
                //存储调用过的url
                List<URL> invokedUrls=new ArrayList<>();

                int max=3;
                while(max>0){
                    //排除已经调用过的URL
                    list.remove(invokedUrls);
                    //负载均衡,获取URL对象
                    URL url= loadbalance.random(list);
                    invokedUrls.add(url);


                     try {
                        result = httpClient.send(url.getHostname(),url.getPort(),invocation);
                     }catch (Exception e) {

                         if(max-- ==0)continue;

                        // 容错
                        return "报错了";
                     }
                }


                //框架的代码不能写死,如何解决动态地址和端口问题?——》注册中心
                //意思::providerip地址以及传入的端口
                //String result=httpClient.send(url.getHostname(),url.getPort(),invocation);

                return result;
            }
        });
        return (T) proxyInstance;
    }
}

服务MOCK的作用:进行代码执行过程的测试,抵达mock的位置之后,后面的语句不执行

服务mock的简单使用

  1. mock测试的代码
public class ProxyFactory {
    public static <T>T getProxy(Class interfaceClass){
        //读取用户配置
        //当前接口       代理逻辑
        Object proxyInstance=Proxy.newProxyInstance(interfaceClass.getClassLoader(),new Class[]{interfaceClass},new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                //服务mock
                String mock=System.getProperty("mock");
                if(mock != null && mock.startsWith("return:")){
                    String result =mock.replace("return","");
                    return result;
                }

					.......

            }
        });
        return (T) proxyInstance;
    }
}


  1. mock的配置
  • 编辑配置
    在这里插入图片描述
  • 添加VM选项
    在这里插入图片描述
  • 添加mock参数,后面的数字随便加的在这里插入图片描述
  1. 测试
    在这里插入图片描述

结论

在RPC框架中,服务重试和模拟测试是提高系统稳定性和可靠性的关键策略。通过选择适当的重试策略、实施服务重试、利用模拟测试来评估和优化系统行为,可以有效地应对网络故障和其他异常情况,提高用户体验和系统可靠性。开发人员应根据具体需求和最佳实践,结合服务重试和模拟测试,精心构建和优化RPC框架,以确保系统的稳定性和性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值