驽马十驾 驽马十驾

驽马十驾,功在不舍

目录
RPC的Mock方案总结
/  

RPC的Mock方案总结

之前有被问到一个问题,远程RPC调用的情况下,如何更方便、更高性能的依赖外部服务提供者提供的接口进行测试。

这其实也是一个很容易遇到的问题,微服务架构下,团队开发各自的模块,当自己模块开发完成后,如果需要进行测试,有可能外部依赖方还没有完成,也有可能需要第三方服务带来的影响,这个时候就需要通过Mockd的方式进行处理。

这里我记录下我最新学习到的知识,应该不全面,有更好,更优质的解决方案,还请留言指出。

  1. 通过Mock软件:Mock Server、Moco 这类软件模拟服务提供者。
  2. 通过Filter拦截本地对第三方的请求,替换为调用本地写好的方法。

吾日三省吾身:为人谋而不忠乎?与朋友交而不信乎?传不习乎?

Mock方式

通过第三方工具Mock模拟的方式,需要考虑如下几个问题:

  1. 接口报文的序列化方式,如果是JSON还挺方便,但是如果是其他序列化,比如protobufthrift这些,模拟起来就不方便了。
  2. 如果消费端是集群,需要开启多个Mock模拟器,同时如果是TCP通信的还不好做无侵入的负载均衡,HTTP通信还可以利用Nginx做服务端负载均衡。

综上:采用Mock这种方式,适用场景建议是是:

  1. RPC是HTTP Resful这类方式,比如 Spring Cloud。
  2. 单元测试下。

Filter方式

Filter方式是通过拦截消费者的请求,然后获取到请求路径、请求参数等信息,然后在拦截中通过反射的方式调用本地写好的服务提供方的模拟方法。

这种方式好处比较多:

  1. 不依赖外部,出现性能问题,可以排除外部的原因。
  2. 集群下也不怕,因为本来就是调用自身。
  3. 不管是HTTP还是TCP,不管是哪种序列化协议也支持,因为根本就没有通过网络通信和序列化。

总结

如果可以,优先推荐Filter的方式进行处理。

您有任何建议和意见,请Email联系: hicode_club@163.com

转载请保留出处 HiCode 俱乐部

骐骥一跃,不能十步。驽马十驾,功在不舍。