采用dubbo对MultipartFile文件进行传输时,会报invoke method 错误,是因为dubbo并不能跨系统传递这个对象,可以采用Hessian
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<version>6.1.26</version>
<exclusions>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
要注意,jetty包中要排除servlet-api包的依赖,否则会报错,Tomcat不能正常启动。
然后在spring中暴露接口:
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="taotao-manager-service-cxl" />
<dubbo:registry protocol="zookeeper" address="192.168.11.131:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:protocol name="hessian" port="20887"/>
<!-- 声明需要暴露的服务接口 -->
<dubbo:service protocol="dubbo" interface="service.a" ref="a"/>
<dubbo:service protocol="hessian" interface="service.b" ref="bImpl"/>
另外,dubbo跨系统传递流,会使得流为空,最简单有效的方法是将流转变为byte数组,然后再将byte数组转化为流,即用byte为中介传递