Dubbo之telnet方式调用Facade接口

2022-06-02 13:55:38 浏览数 (1)

在我的日常开发中,经常会自测自己写的Dubbo接口,或者联调调用别人写的Dubbo接口.

而通过Dubbo提供的telnet方式调用Dubbo接口,是我经常使用的方式.

然而方法的入参不同,调用的写法也不一样.接下来就由简至繁的方式介绍各种写法.

首先说明下:

我们调用的方法名叫做query,接口名叫做UserInfoFacade.

当然,你还要知道提供者的IP和端口,通过telnet命令连接.

第一种

入参是一个简单的字符串

代码语言:javascript复制
String query(String address);

我们通过invoke命令调用

代码语言:javascript复制
invoke UserInfoFacade.query("HANGZHOU")

第二种

代码语言:javascript复制
String query(String address, Integer year);
代码语言:javascript复制
invoke UserInfoFacade.query("HANGZHOU", 2020)

第三种

代码语言:javascript复制
String query(UserInfoCondition userInfoCondition);
// 入参是一个对象,如下
public class UserInfoCondition {
    private String address;
}
代码语言:javascript复制
// 通过一个JSON格式传入
invoke UserInfoFacade.query({"address": "HANGZHOU"})

我们也可以通过class指定入参的类型

代码语言:javascript复制
invoke UserInfoFacade.query({"class":"com.infuq.condition.UserInfoCondition","address": "HANGZHOU"})

第四种

代码语言:javascript复制
String query(UserInfoCondition userInfoCondition);
// 入参是一个对象,对象中有个List属性
public class UserInfoCondition {
    private List<String> addressList;
}
代码语言:javascript复制
invoke UserInfoFacade.query({"addressList":["A","B","C"]})
// 入参还是一个JSON格式,key是入参对象的属性名,value是属性的值

第五种

代码语言:javascript复制
String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
    private List<UserInfo> userList;
}
public class UserInfo {
    private String address;
    private String year;
}
代码语言:javascript复制
invoke UserInfoFacade.query({"userList":[{"address":"HANGZHOU","year":"2020"},{"address":"HANGZHOU","year":"2021"}]})
// 可以这么理解入参,入参如果是对象,那么就用{}表示
// 属性如果是List,那么就用[]表示
// 即对象用{}表示,List用[]表示

第六种

这种情况比较特别,需要留意

代码语言:javascript复制
String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
    private List<Map<String, Integer>> mList;
}
代码语言:javascript复制
invoke UserInfoFacade.query({"mList":[{"year":2020},{"month":12}]})

第七种

代码语言:javascript复制
String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
    // 这里的Map的key是字符串类型
    private List<Map<String, UserInfo>> mUserList;
}
代码语言:javascript复制
invoke UserInfoFacade.query({"mUserList":[{"Jim":{"address":"HANGZHOU","year":"2020"}},{"Ktu":{"address":"HANGZHOU","year":"2021"}}]})

第八种

代码语言:javascript复制
String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
    // 这里的Map的key是Integer类型
    private List<Map<Integer, UserInfo>> mUserList;
}
代码语言:javascript复制
invoke UserInfoFacade.query({"xUserList":[{1:{"address":"HANGZHOU","year":"2020"},"class":"java.util.HashMap"},{2:{"address":"ZHEJIANG","year":"2021"},"class":"java.util.HashMap"}]})
或
invoke UserInfoFacade.query({"xUserList":[{"1":{"address":"HANGZHOU","year":"2020"},"class":"java.util.HashMap"},{"2":{"address":"ZHEJIANG","year":"2021"},"class":"java.util.HashMap"}]})

第九种

代码语言:javascript复制
String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
    private Map<Integer, UserInfo> mUserMap;    
}
代码语言:javascript复制
invoke UserInfoFacade.query({"mUserMap":{12:{"address":"ZHEJIANG","year":"2020"},"class":"java.util.HashMap",13:{"address":"HANGZHOU","year":"2021"},"class":"java.util.HashMap"}})

第十种

代码语言:javascript复制
String query(UserInfoCondition userInfoCondition);
public class UserInfoCondition {
    private Map<UserInfo, Integer> mUserMap;    
}
代码语言:javascript复制
invoke UserInfoFacade.query({"mUserMap":{{"address":"ZHEJIANG","year":"2020"}:12,"class":"java.util.HashMap",{"address":"HANGZHOU","year":"2021"}:13,"class":"java.util.HashMap"}})

如果通过class指定的类是内部类,则通过$符号

代码语言:javascript复制
invoke ItemProductService.getByItemProductQuery({"class":"com.xyz.service.ItemProductService$ItemProductQuery","artisanId":"11150a7f733942168960d85e80643c22","rows": 10000,"offset": 0,"isDel": 0})

0 人点赞