Dubbo使用invoke指令来调用dubbo接口
最近被分配了一个任务,是通过`dubbo`的方式对外提供服务,`dubbo`没有我们一般的web项目中的`Controller`层,所以没有办法通过`http`的方式进行调用调试。作为萌新的我,确实有点一筹莫展,直到被老司机提醒使用`dubbo` `invoke`的方式进行接口测试,我才有方向。
Dubbo使用invoke指令来调用dubbo接口
前言
最近被分配了一个任务,是通过dubbo
的方式对外提供服务,dubbo
没有我们一般的web项目中的Controller
层,所以没有办法通过http
的方式进行调用调试。作为萌新的我,确实有点一筹莫展,直到被老司机提醒使用dubbo
invoke
的方式进行接口测试,我才有方向。
关于dubbo的搭建可参考我的博客:SpringBoot使用dubbo实现RPC调用
正文
首先我们要知道Dubbo
不同于传统的web
项目需要运行在类似于tomcat
、jboss
等WEB
容器中,Dubbo
的运行机制我们可以参考下面Dubbo
的组件来进行探究。
Dubbo 核心组件
Provider
: 暴露服务的提供方,可以通过jar或者容器的方式启动服务Consumer
:调用远程服务的服务消费方。Registry
: 服务注册中心和发现中心。Monitor
: 统计服务和调用次数,调用时间监控中心。Container
:服务运行的容器。
Dubbo的Container
模块,是一个独立的容器,它就可以为dubbo
提供服务发现机制。并且这个Container
容器默认是采用dubbo
协议在20880端口号暴露服务,所以我们要通过这个接口来调用dubbo
接口。
使用invoke调用dubbo接口服务
使用telnet命令进入控制台
命令:telnet ip
端口
telnet 127.0.0.1 20880
查看可用的dubbo接口
ls
: 显示服务列表。ls -l
:显示服务详细信息列表。ls XxxService
:显示服务的方法列表。ls -l XxxService
: 显示服务的方法详细信息列表。
使用invoke命令注入
如果注入的是json
,可参考以下格式进行dubbo
服务调用
invoke XxxService.xxxMethod({“name”: “luo”}, 18, “男”)
如果注入的是对象,可参考以下格式进行dubbo
服务调用:
invoke XxxService.xxxMethod([{“name”:“luo”,“age”:18,“sex”:“男”,“class”:“com.luo.entity.User”}])
快速生成Invoke命令
使用一个Demo
可以帮助大家生成对应的invoke
命令
public class GenerateInvoke {
public static void main(String[] args) throws NoSuchMethodException {
QueryReq queryReq = new QueryReq();
queryReq.setName("溪源")
String invokeCommand = getInvoke(queryReq, ICeshiService.class, "query");
System.out.println("invoke命令↓");
System.out.println(invokeCommand);
}
/**
* 生成invoke命令
* @param reqParam 请求参数
* @param reqService 请求的接口service服务
* @param reqMathed 请求的service下的方法
* @throws NoSuchMethodException
*/
public static String getInvoke(Object reqParam, Class<?> reqService, String reqMathed) throws NoSuchMethodException {
JSONObject jsonObject = JSONObject.parseObject(JsonUtil.toJson(reqParam));
jsonObject.put("class", reqParam.getClass().getName());
return "invoke "+ reqService.getName()+
"."+ reqService.getMethod(reqMathed,reqParam.getClass()).getName()+
" ("+jsonObject.toJSONString()+")";
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)