route service
2015年8月27日
和其他厂一样阿里也有造轮子的习惯,基于mina搞了个二进制协议TBRemoting,替换冗余低效的wsdl。虽然是大大减少了网络数据传输量提升了性能,但配套设施却没跟上对于开发测试并不友好。对于标准wsdl而言通过soupui就可快速构造请求测试服务端接口是否ok,二进制协议TBRemoting却没有相应的配套工具。与此同时由于存在接口参数定义不规范(如入参Bean中包含getXXX方法却不实际包含XXX这个属性)导致cxf无法正确进行序列化,导致无法通过soupui之类的工具构造请求。工欲善其事,必先利其器,挽起袖子自己干。
新增路由接口作为门面,以json字符串描述目标接口参数
将目标接口元数据与入参一起打包封装为路由接口入参,路由接口解析参数将请求转发至目标接口处理
service req–>route service req–>route service –> service路由接口设计
- 举例说明
目标接口:com.helloworld.Service 目标方法:sayHello(String msg) 目标接口入参:helloworld 目标接口返回类型:String RouteOrder order = new RouteOrder(); order.setServiceName("com.helloworld.Service"); order.setMethodName("sayHello"); Class>[] types = { String.class}; ListparameterTypes = new ArrayList (); for (int i = 0; i < types.length; i++) { parameterTypes.add(types[i].getName()); } order.setParameterTypes(parameterTypes); List parameters = new ArrayList (); parameters.add(JSONObject.toJSONString("helloworld")); order.setParameters(parameters); RouteResult routeResult = routeService.route(order); String result = (String) routeResult.getResult();