在使用dubbo过程中碰到了需要上传图片这样的需求,而dubbo协议适合于小数据量大并发的服务调用,像上传文件这种需求推荐使用hessian协议。下面记录使用hessian协议爆露服务中出现的问题。
1.引入hessian的jar
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
2.在web.xml中增加servlet配置
<servlet>
<servlet-name>dubbo</servlet-name>
<servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dubbo</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
3.在provider中配置hession协议
<dubbo:protocol name="hessian" port="8080" contextpath="dubbo" server="servlet" />
<dubbo:service interface="com.test.UploadService" ref="uploadService" protocol="hessian" />
<bean id="uploadService" class="com.test.impl.UploadServiceImpl" />
注意我的web容器是tomcat,而且使用servlet派发请求,所以这里的port和tomcat的端口保持一直。contextpath设置的是servlet引用上下文的路径(在web.xml中的配置的)。
4.在consumer端配置没有特殊的地方,除了引用dubbo的jar,还有引用hessian的jar
5.启动tomcat加载项目。在这个地方有个需要注意的地方,项目的访问不能带有项目名称。一般情况下配置后tomcat访问项目:http://127.0.0.1:8080/projectname,这里指的意思是把项目的访问路径配置为:http://127.0.0.1:8080 即可。
6.最好以多个InputStream而不File的形式传递参数,否则在多个应用之间中转会出现问题。
