多平台统一管理软件接口,如何实现多平台统一管理软件接口
769
2023-04-21
本文目录一览:
基于这样一个假设后端rpc接口自动化测试框架,那就是客户端已经知道了服务端后端rpc接口自动化测试框架的地址后端rpc接口自动化测试框架,这部分会由后续的服务发现机制完善。通用接口
hello方法需要传递一个对象,HelloObject对象,定义如下:
注意这个对象需要实现 Serializable 接口,因为它需要在调用过程中从客户端传递给服务端。
接着我们在服务端对这个接口进行实现,实现的方式也很简单,返回一个字符串就行:
服务端需要哪些信息,才能唯一确定服务端需要调用的接口的方法呢后端rpc接口自动化测试框架?
那么服务端知道以上四个条件,就可以找到这个方法并且调用了。我们把这四个条件写到一个对象里,到时候传输时传输这个对象就行了。即 RpcRequest 对象:
那么服务器调用完这个方法后,需要给客户端返回哪些信息呢?
如果调用成功的话,显然需要返回值,如果调用失败了,就需要失败的信息,这里封装成一个 RpcResponse 对象:
这里还多写了两个静态方法,用于快速生成成功与失败的响应对象。其中,statusCode属性可以自行定义,客户端服务端一致即可。
客户端方面,由于在 客户端这一侧我们并没有接口的具体实现类,就没有办法直接生成实例对象 。这时,我们可以 通过动态代理的方式生成实例,并且调用方法时生成需要的RpcRequest对象并且发送给服务端 。
这里我们采用JDK动态代理,代理类是需要实现 InvocationHandler 接口的。
我们需要传递host和port来指明服务端的位置。并且使用getProxy()方法来生成代理对象。
InvocationHandler 接口需要实现invoke()方法,来指明代理对象的方法被调用时的动作。 在这里,我们显然就需要生成一个RpcRequest对象,发送出去,然后返回从服务端接收到的结果即可:
生成RpcRequest很简单,我 使用Builder模式来生成这个对象 。发送的逻辑我使用了一个RpcClient对象来实现,这个对象的作用, 就是将一个对象发过去,并且接收返回的对象。
我的实现很简单,直接使用Java的序列化方式,通过Socket传输。 创建一个Socket,获取ObjectOutputStream对象,然后把需要发送的对象传进去即可,接收时获取ObjectInputStream对象,readObject()方法就可以获得一个返回的对象。
服务端的实现就简单多了, 使用一个ServerSocket监听某个端口,循环接收连接请求,如果发来了请求就创建一个线程,在新线程中处理调用。 这里创建线程采用线程池:
这里简化了一下, RpcServer暂时只能注册一个接口,即对外提供一个接口的调用服务,添加register方法,在注册完一个服务后立刻开始监听:
这里向工作线程WorkerThread传入了socket和用于服务端实例service。
WorkerThread实现了Runnable接口,用于接收RpcRequest对象,解析并且调用,生成RpcResponse对象并传输回去。 run方法如下:
其中,通过class.getMethod方法,传入方法名和方法参数类型即可获得Method对象。如果后端rpc接口自动化测试框架你上面RpcRequest中使用String数组来存储方法参数类型的话,这里你就需要通过反射生成对应的Class数组了。通过method.invoke方法,传入对象实例和参数,即可调用并且获得返回值。
服务端侧,我们已经在上面实现了一个HelloService的实现类HelloServiceImpl,我们只需要创建一个RpcServer并且把这个实现类注册进去就行了:
服务端开放在9000端口。
客户端方面,我们需要通过动态代理,生成代理对象,并且调用,动态代理会自动帮我们向服务端发送请求的:
我们这里生成了一个HelloObject对象作为方法的参数。
首先启动服务端,再启动客户端,测试结果:
简单后端rpc接口自动化测试框架的介绍RPC是什么,RPC整个调用流程是什么,包含后端rpc接口自动化测试框架了什么组件。然后实际编写一个RPC实例,模拟100个线程调用以验证RPC的可用性,稳定性等。最后总结自己编写的RPC框架存在哪些问题,可以去完善的,一个优秀的RPC框架应该必备的功能点。
RPC(Remote Procedure Call),远程过程调用,可通过网络调用其他机器的服务请求。RPC是一种规范,和TCP、UDP都没有关系,RCP可以采用TCP协议完成数据传输,甚至可以使用HTTP应用协议。RCP是C端模式,包含了服务端(服务提供方)、客户端(服务使用方),采用特定的网络传输协议,把数据按照特定的协议包装后进行传输操作等操作。先来了解下一个具体的RPC调用请求的执行过程
本图来自网络
这就是一个完整的RPC调用过程,对使用方而言就 只暴露了本地代理对象 ,剩下的数据解析、运输等都被包装了,从服务提供方的角度看还有 服务暴露 ,如下图DUBBO的架构图。
学习写RPC之前必须先了解 动态代理 和 反射 这两个知识点,如不了解先自行了解,本学习笔记不涉及到此内容的介绍。
文件夹目录
可以很清楚的看到convert方法就是从一个输入流中读取出类名称、方法名等数据,组成一个MethodParameter对象,也就是上面所说的Request
服务暴露存储了一个 Map<String, Object objectMap 对象,所有可对外提供服务的都必须添加到该容器中,以便于收到网络数据后能找到对应的服务,然后采用反射invoke调用,返回得到的结果。
简单的BIO模型,开启了一个ServerSocket后,接收到数据后就把套接字丢给一个新的线程处理,ServerSocketRunnable接受一个socket后,解析出MethodParameter这个请求对象,然后调用服务暴露的invoke方法,再写回到socket传输给客户端
服务使用方需要使用register进行服务的注册,会生成对应的本地代理对象,后续只需要通过本地代理对象。
代理对象被调用后生成一个MethodParameter对象,通过此IOClient把数据传输到服务端,并且返回对应的数据。
服务端
客户端
测试服务
运行效果
这只是一个非常简单的RPC实践,包含了服务暴露、服务注册(Proxy生成)、BIO模型进行网络传输,java默认的序列化方法, 对RPC有一个初步的认识和了解,知道RPC必须包含的模块 。
不过还是有很多需要优化的点以改进。
还有例如服务统计、优雅下线、负载均衡等也都是一个成熟的RPC框架必须要考虑到的点。
本人微信公众号(搜索jwfy)欢迎关注
http是指从客户端到服务器端的请求消息,rpc是远程过程调用协议,它们之间有什么区别呢,下面是我整理的相关内容,希望对大家有所帮助!
rpc和http的区别是什么
rpc和http的存在重大不同的是:http请求是使用具有标准语义的通用的接口定向到资源的,这些语义能够被中间组件和提供服务的来源机器进行解释。结果是使得一个应用支持分层的转换(layers of transformation)和间接层(indirection),并且独立于消息的来源,这对于一个Internet规模、多个组织、无法控制的可伸缩性的信息系统来说,是非常有用的。与之相比较,rpc的机制是根据语言的API(language API)来定义的,而不是根据基于网络的应用来定义的。
HTTP和RPC的优缺点主要来阐述HTTP和RPC的异同,让大家更容易根据自己的实际情况选择更适合的方案。
传输协议
RPC:可以基于TCP协议,也可以基于HTTP协议
HTTP:基于HTTP协议
传输效率
RPC:使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率
HTTP:如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为一个RPC来使用的,这时标准RPC框架更多的是服务治理
性能消耗
RPC:可以基于thrift实现高效的二进制传输
HTTP:大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能
负载均衡
RPC:基本都自带了负载均衡策略
HTTP:需要配置Nginx,HAProxy来实现
服务治理
RPC:能做到自动通知,不影响上游
HTTP:需要事先通知,修改Nginx/HAProxy配置
总结
RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便。HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。
关于后端rpc接口自动化测试框架和rpc接口测试方法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 后端rpc接口自动化测试框架的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于rpc接口测试方法、后端rpc接口自动化测试框架的信息别忘了在本站进行查找喔。版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~