ESB提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口,但是ESB并没有http请求效率高。
废话就不多说了,先看看怎么实现的吧。
首先确定请求报文的格式,以我在项目中的报文为例:
CMercPerformanceMgmtqueryStoreScoresSFS5136fa413f96493391d6075f654d4d83bcfbbc57bd8e47e50224136722150
这就是一个接口的请求报文,一般报文格式是固定的,需要改动的只是报文的节点,被调用方接口也是根据节点筛选出所需要的请求参数,另外,报文是用POST方式提交,参数是封装在body中的。
下面是被请求接口:为了各位看的明白些,我狠添注释,这样代码和注释一起看比较方便
//RequestMapping,这个是spring中截获请求的url作用 @RequestMapping("/my_product_review") public String getPendingOrderItems(HttpServletRequest request, HttpServletResponse response) throws IOException { //这里是从request中取到报文,getMbfRequestInput方法会在下面贴出代码 MbfRequestInput mbfRequestInput = getMbfRequestInput(request); //根据报文中参数创建请求对象,这里只要PendingOrderItemDTO 中的属性跟请求报文的节点一致即可(也就是报文中 中的节点名称) PendingOrderItemDTO requestDTO = (PendingOrderItemDTO) mbfRequestInput .getMbfBody(PendingOrderItemDTO.class); //封装返回对像的报文 MbfResponseWrapper mbfResponseWrapper = new MbfResponseWrapper( mbfRequestInput.getMbfHeader());
// 处理请求参数,orderVo为最终返回报文的类
MobilePhonePendingOrderVO orderVO = null;