Telnet 及 Dubbo(针对微服务)
一、相关概念和工作原理(Dubbo)(相当于一个中介)
二、Dubbo 接口测试
1、RPC
远程过程调用(Remote Procedure Call):像调用本地方法一样,调用远程方法
常见的 RPC 框架有 Dubbo、Thrift、grpc
2、Dubbo
Dubbo 是一款高性能、轻量级、基于Java的开源RPC框架(最早由阿里开源,2018年贡献给Apache组织)。
Dubb 接口的作用:远程调用 Java 写的方法,需要传参、获取返回值。
三、文档解析
从中需要或取的信息
服务名
方法名
参数类型、返回值类型
补充:Java 方法定义的语法结构类型:返回值类型 方法名 (数据类型 形参1,数据类型 形参2)。void 代表该函数无返回值
1、基于 Java 方法的接口测试
void 定义的代表无返回值
四、Telnet 工具远程调用
1、启用 Telnet(Windows是自带的,但是需要开启服务。二Mac 需要下载文件)(启动后重启电脑,打开终端输入:Telnet Client。查看是否成功)
2、Telnet 调用 dubbo 接口(记住输入命令后要敲 两次回车键,)
3、Telnet 查询dubbo对应服务(服务名为最后一个单词,点的后面。如:com.itheima.service.OrderService。OrderService为服务名,前面是包名)
ls:进入第二步的dubbo后,通过Linux命令:ls 可以查看有多少个微服务
ls -l 服务名:可以查看具体的服务名对应的信息(查看该服务名类下面的方法)
4、Telnet 调用 dubbo接口(小括号里面的参数放实参)
五、Python 调用 dubbo 接口
1、dubboclient 介绍
2、实现步骤:
案例 1 :(传递普通参数)(参数以 java. 开头的参数)
from dubboclient import DubboClient
#创建Dubboclient对象(指定IP 和 端口号)
dubbo_client = DubboClient("211.103.136.244",6502)
#调用服务接口(服务名,方法名,参数)
response = dubbo_client.invoke("MemberService","findByTelephone","13020210001")
#获取相应数据
print(response)
案例 2 :(传递对象参数)(参数类型为:com.公司名.项目名.类名)此时就是对象参数
自定义类 做 参数 ,根据接口文档,组织字典封死传参
给字典加 键 k:“class”,值 v:指明 类 对应的 完整包名 和 类名(ls -l 服务名)
from dubboclient import DubboClient #创建Dubboclient对象(指定IP 和 端口号) dubbo_client = DubboClient("211.103.136.244",6502) #准备add方法,所需要的数据 info = {"id":911,"name":"杜一","phoneNumber":"13049576891"} #如果class已经存在,覆盖原有的class,如果不存在就新增一组元素到字典 info["class"] = "com.itheima.pojo.Member" #调用服务接口(服务名,方法名,参数) response = dubbo_client.invoke("MemberService","add",info) #获取相应数据 print(response)
案例 3 :传递列表参数
from dubboclient import DubboClient #创建Dubboclient对象(指定IP 和 端口号) dubbo_client = DubboClient("211.103.136.244",6502) #准备列表数据 months = ["2021-3","2021-9"] #调用服务接口(服务名,方法名,参数) response = dubbo_client.invoke("MemberService","findMemberCountByMonths",months) #获取相应数据 print(response)
案例 4 :响应数据返回日期格式(日期格式很严格,注意要一定重视)
from dubboclient import DubboClient #创建Dubboclient对象(指定IP 和 端口号) dubbo_client = DubboClient("211.103.136.244",6502) #准备列表数据 info = [{"orderDate":"2021-05-07 16:45:12","number":117}] #日期格式相当严格,注意 #调用服务接口(服务名,方法名,参数) response = dubbo_client.invoke("MemberService","add",info) #获取相应数据 print(response)
案例 5 :直接传字符串格式
from dubboclient import DubboClient #创建Dubboclient对象(指定IP 和 端口号) dubbo_client = DubboClient("211.103.136.244",6502) #准备string数据 month = "2012-02" #调用服务接口(服务名,方法名,参数) response = dubbo_client.invoke("OrderSettingService","getOrderSettingByMonth",month) #获取相应数据 print(response)
案例 6 :修改设置数量
from dubboclient import DubboClient #创建Dubboclient对象(指定IP 和 端口号) dubbo_client = DubboClient("211.103.136.244",6502) #准备数据(日期和数据) date = {"orderDate":"2021-10-13","number":15,"class":"com.itheima.pojo.OrderSetting"} #date["class"] = "com.itheima.pojo.OrderSetting" #同上面的class #调用服务接口(服务名,方法名,参数) response = dubbo_client.invoke("OrderSettingService","editNumberByDate",date) #获取相应数据 print(response)
3、分析 bug 来源
通过抓包工具,抓取响应解果,分析数据,查看是前端还是后端的bug