从0到1实现rpc之丰富测试案例

测试案例主要针对服务消费者consumer,复杂逻辑都在consumer端。

  1. 常规int类型,返回User对象

图片

参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试方法重载,同名方法,参数不同

图片

方法签名的实现,主要逻辑都在MethodUtils工具类中。

  1. 测试返回字符串

图片

参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试重载方法返回字符串

图片

参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试local toString方法

图片

本地方法不走远程调用,主要逻辑都在MethodUtils工具类中。

  1. 常规int类型,返回int

图片

基本参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试long+float类型

图片

基本参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试参数是User类型

图片

对象参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试返回long[]

图片

数组参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试参数和返回值都是long[]

图片

数组参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试参数和返回值都是List类型

图片

List参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试参数和返回值都是Map类型

图片

Map参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试参数和返回值都是Boolean/boolean类型

图片

基本参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试参数和返回值都是User[]类型

图片

对象数组参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 试参数为long,返回值是User类型

图片

基本参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试参数为boolean,返回值都是User类型

图片

基本参数类型转换,主要实现逻辑都在TypeUtils工具类中。

  1. 测试服务端抛出一个RuntimeException异常

图片

异常处理,主要实现逻辑都在RpcInvocationHandler工具类中。

  1. 测试服务端抛出一个超时重试后成功的场景

图片

异常超时重试,主要实现逻辑都在RpcInvocationHandler工具类中。

  1. 测试通过Context跨消费者和提供者进行传参

图片

跨线程传参

  • 使用ThreadLocal实现;
  • 在RpcRequest中携带传递的参数;
  • 在consumer端,使用ParameterFilter将参数从RpcContext传递到RpcRequest;
  • 在provider端,反射调用之前,从RpcRequest中获取到参数封装到当前RpcContext。调用完成之后,需要清除,防止内存泄漏和上下文污染

源码:

https://github.com/midnight2104/midnight-rpc/tree/lesson11