原本系统之间通信采用Restful Web Service,但其中没有考虑安全性问题,因此决定使用稍微复杂点的二进制协议,Hessian服务。
Hessian是一个轻量级的Remoting On HTTP工具,使用简单的方法提供了RMI的功能,相比Web Service,Hessian更简单,快捷,采用的是二进制RPC协议。
Hessian处理过程的简要流程:
客户端 - 序列化写到输出流 - 远程方法(服务器端) - 序列化写到输出流 - 客户端读取输入流 - 输出结果
Hessian通过Servlet提供远程服务,需要将匹配某个模式的请求映射到Hessian服务。如果集成到Spring中,可以通过DispatcherServlet完成此功能,DispatcherServlet可以将匹配模式的请求转发到Hessian服务。
spring-mvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/config/springmvc.xml
1
spring-mvc
/
配置web.xml,将任意请求都映射到该Dispatcher中。
首先,使用SimpleUrlHandlerMapping,制定对应的service URL,和对应的服务接口,服务实现:
在客户端和服务端之间,需要共享服务接口对象以及接口中使用的对象,注意自定义的对象由于要进行二进制传输,必须要实现java.io.Serializable接口。比较好的方式使用一个公用的maven私服,这样就可以避免接口改动造成的频繁jar包传输。
在客户端中,需要知道Hessian服务对应的Url,这个是通过上面所说的service url以及服务器地址,端口得到的。
客户端方面的方法也比较简单,通过Url得到对应的服务代理,来进行下一步操作:
HessianProxyFactory factory = new HessianProxyFactory(); try { String url = "http://127.0.0.1:8888/remote/xxxService"; IXXXTaskService xxxTaskService = (IXXXTaskService) factory.create(IXXXTaskService.class, url); XXXResultStatus status = xxxTaskService.submitTask("211", contentBuilder.toString()); System.out.println(status); } catch (MalformedURLException e) { e.printStackTrace(); }
如果服务已经启动,那么该服务肯定执行成功。
在Spring中调用Hessian服务也非常简单和容易,只需要在任务中新建一个HessianProxyFactoryBean,并指定对应的服务url和服务接口即可。
Hessian 是由 caucho 提供的一个基于 binary-RPC 实现的远程通讯 library,基于 Binary-RPC 协议实现,需通过 Hessian 本身提供的 API 来发起请求,Hessian 通过其自定义的串行化机制将请求信息进行序列化,产生二进制流,Hessian 基于 Http 协议进行传输,响应端根据 Hessian 提供的 API 来接收请求,Hessian 根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了,处理完毕后直接返回, hessian 将结果对象进行序列化,传输至调用端。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225853.html原文链接:https://javaforall.net