开发者线上环境测试发布后的Dubbo接口服务是否OK
作为开发者,dubbo发布服务发布之后,需要调用方调用才可以检测接口是否正常。为了能够自测,可以开发一套后台管理界面直接操作,简介明了。不需要采用传统的telnet方式,在线上服务器上查看。
可以根据自己的服务做适配扩展,做成web界面服务,大致核心内容如下:
1.先看下接口,查询参数是复杂对象
public Response<PageResult<BriefDTO>> pageByHospital(PageQuery<String> pageQuery);
2.实际运行代码;
/**
* @author zhanghuilong
* @version V1.0
* @desc
* @since 2018/01/14
*/
public class DubboInterfaceClient {
public static void main(String[] args) {
//初始化参数
String serviceInterface = "com.huilong.hrs.portal.rpc.share.ExpertRpcService";
//接口方法
String methodName = "pageByHospital";
//IP
String serverIp = "192.168.100.64";
// 端口
String serverPort = "28087";
// dubbo 引用
ReferenceConfig reference = new ReferenceConfig();
// 查询参数
QueryParamBO paramBO = new QueryParamBO(serviceInterface, methodName, serverIp, serverPort);
try {
Class<?> forName = Class.forName(serviceInterface);
// 1. 获取dubbo服务链接
Object object = initDubbo(reference, forName, paramBO);
// 2. 校验获取方法
Method method = getMethod(forName, paramBO);
// 3. 设置查询参数,接口中多个参数,使用数组形式赋值。
Object[] objectArgs = new Object[1];
PageQuery<String> pageQuery = new PageQuery<>();
pageQuery.setPageSize(10);
pageQuery.setPageIndex(0);
pageQuery.setQueryParam("1b20c89d-2c00-40c4-babc-4d34adb80d45000");
objectArgs[0] = pageQuery;
paramBO.setObjectArgs(objectArgs);
// 4. 指定方法,参数 调用dubbo接口方法
Object invokeResult = method.invoke(object, paramBO.getObjectArgs());
// 5. 打印参数调用结果
System.out.println("invokeResult = [" + JSON.toJSONString(invokeResult) + "]");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
private static Method getMethod(Class<?> forName, QueryParamBO paramBO) {
Method[] methods = forName.getMethods();
for (Method m : methods) {
if (paramBO.getMethodName().equals(m.getName())) {
return m;
}
}
return null;
}
private static Object initDubbo(ReferenceConfig reference, Class<?> forName, QueryParamBO paramBO) {
reference.setApplication(new ApplicationConfig("test-app"));
reference.setInterface(forName);
reference.setUrl("dubbo://" + paramBO.getServerIP() + ":" + paramBO.getServerPort());
reference.setTimeout(30000);
Object o = reference.get();
return o;
}
}