开发者线上环境测试发布后的Dubbo接口

开发者线上环境测试发布后的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;
    }

}

猜你喜欢

转载自blog.csdn.net/java_huilong/article/details/79060401
今日推荐