Hessian:采用的是二进制RPC协议,因为采用的是二进制协议。
Hessian通过其自定义的串行化机制将请求信息进行序列化,产生二进制流,基于Http协议进行传输,
响应端根据Hessian提供的API来接收请求,Hessian根据其私有的串行化机制来将请求信息进行反序列化,
传递给使用者时已是相应的请求信息对象了。
Spring的hessian远程调用
客户端:
<bean id="testHessianServiceClient"
class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<!--访问服务端的路径-->
<property name="serviceUrl">
<value>
${client.remote.url}/callClientHessian
</value>
</property>
<!--是否允许方法重载,默认为false-->
<property name="overloadEnabled" value="true"></property>
<!--服务端接口-->
<property name="serviceInterface">
<value>com.test.hessian.HessianService</value>
</property>
</bean>
serviceInterface 是RemoteAccessor抽象类的属性
serviceUrl 是UrlBasedRemoteAccessor抽象类的属性
UrlBasedRemoteAccessor抽象类继承RemoteAccessor抽象类
服务端:
<bean id="service" class="com.test.hessian.TestService" />
<bean name="/callClientHessian" class="org.springframework.remoting.caucho.HessianServiceExporter">
<property name="service" ref="service" />
<property name="serviceInterface">
<value>com.test.hessian.HessianService</value>
</property>
</bean>
service,serviceInterface都是RemoteExporter抽象类的属性
web.xml中配置
<servlet>
<servlet-name>spring-remote</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-remote</servlet-name>
<url-pattern>/remote/*</url-pattern>
</servlet-mapping>
注意:在使用hessian的时候遇到一个问题,就是在客户端不能有与服务端接口名称相同的接口,否则客户端就直接找客户端的接口了,而不找远程的接口
备注:相关的jar包。commons-logging-1.1.1.jar,hessian-3.2.0.jar,log4j-1.2.9.jar,
spring.jar spring-web.jar spring-webmvc.jar
hessian就像是远程注入,服务端创建服务,客户端调用